\documentclass[a4paper, 11pt, oneside]{report}

%%muy util para salto de línea
%\vspace{0.5 cm}
%Para garantizar la división correcta de palabras en castellano
\usepackage[spanish,activeacute]{babel}
%%\hyphenrules{nohyphenation}


%%para cambiar el tamaño del titulo de capitulos
\usepackage{titlesec}
\titleformat{\chapter}[display]
{\normalfont\Large\bfseries\centering}{\chaptertitlename\ \thechapter \centering}{12pt}{\large}
\titleformat{\section}{\large\bfseries}{\thesection}{12pt}{}
\titleformat{\subsection}{\large\bfseries}{\thesubsection}{12pt}{}
\titleformat{\subsubsection}{\large\bfseries}{\thesubsubsection}{12pt}{}

%evitar reset de los footnote
\usepackage{remreset}

\makeatletter
\@removefromreset{footnote}{chapter}
\makeatother

\hyphenation{
             an-te-rio-res
             co-he-ren-te
	     Com-pu-ter
             co-no-ci-mien-to
	     con-si-de-ran
             cons-tan-te
             correc-to
             correc-ta-men-te
	     corres-pon-de
             corres-pon-dien-te
             corres-pon-dien-tes
	     co-rri-ge
	     de-sa-rro-lla-do
             des-pla-za-mien-to
             di-fe-ren-te
             di-fe-ren-tes
             Do-cu-men-to
	     dom-ser-ver
     	     edi-tar
	     ela-bo-rar
             es-tu-dian-te
             exis-te
	     exis-ten
             fac-to-ri-za-ción
	     ge-ne-ra-les
	     he-rra-mien-ta
	     HEISSENBER-GER
             in-de-pen-dien-te-men-te
             in-fe-ren-cia
	     ins-ta-la-ción
             La-ti-no-a-me-ri-ca-na
	     ma-ne-ra	
             ma-te-má-ti-ca
             má-xi-mo
	     mo-di-fi-ca-cio-nes
             pre-di-ca-do
             po-si-ti-vo
             po-si-ti-vos
	     pro-ble-ma
	     pro-ble-mas
             Pro-gra-mming
             ra-zo-na-mien-to
	     reali-zar
             re-curren-cia
  	     re-fe-ren-tes
             re-fle-xi-va
  	     re-pre-sen-ta-da
             re-pre-sen-ta
             re-pre-sen-ta-ción
	     res-pec-ti-vo
             res-pec-to
	     res-pec-tivo
	     re-troa-li-men-ta-ci-ón
	     re-que-ri-mien-tos
             si-guien-te
             si-guien-tes
             va-ria-ble
             va-ria-bles
	     vi-ce-ver-sa
	     vi-sua-liza 
             }

\usepackage{float}
%images
\usepackage{graphicx}

%Paragraph
%\usepackage{blindtext}

% inserción url's notas de pie.
%\usepackage{url}

%cambiar color de footnotes
\usepackage[usenames,dvipsnames]{color}

\renewcommand{\thefootnote}{\textcolor{blue}{\arabic{footnote}}}

%url
\usepackage[colorlinks=true,urlcolor=blue,linkcolor=blue, hyperfootnotes=false]{hyperref}

%Numeración de página
\setcounter{page}{1}
\pagenumbering{arabic}

%insertat source code
\usepackage{listings}
%%defino atributos para code bash
%%\lstset{language=bash, basicstyle=\ttfamily, frame=single}  \footnotesize
%%\lstset{basicstyle=\footnotesize\ttfamily, escapechar={', --} }
\lstset{basicstyle=\small\ttfamily, keywordstyle=\bfseries, escapechar={', --}, showstringspaces=false}
%%%\lstset{basicstyle=\scriptsize\ttfamily, keywordstyle=\bfseries, escapechar={', --}, showstringspaces=false}
%comentarios que incluyen varias líneas
\usepackage{verbatim}

%negrita
\usepackage{bold-extra}

% idioma
\usepackage[utf8]{inputenc}
\usepackage[spanish]{babel}

%tablas
\usepackage{booktabs}
\usepackage{multirow}

% Personalizar listas
\usepackage{paralist}

%rotar tablas
\usepackage{rotating}
%formate texto tablas 
\usepackage{array}
%color tablas
\usepackage{colortbl}
%\usepackage[table]{xcolor}

%espaciado
\usepackage{setspace}
%%\onehalfspacing
\setlength{\parindent}{0pt}
\setlength{\parskip}{2.0ex plus0.5ex minus0.2ex}

%margenes según n. icontec
\usepackage{vmargin}
\setmarginsrb           { 4.0cm}  % left margin
                        { 3.0cm}  % top margcm
                        { 2.0cm}  % right margcm
                        { 2.0cm}  % bottom margcm
                        {   0pt}  % head height
                        {0.0 cm}  % head sep
                        {   9pt}  % foot height
                        { 1.0cm}  % foot sep

% Paquetes de la AMS:
\usepackage{amsmath, amsthm, amsfonts}
\addto\captionsspanish{\def\refname{\textsc{Bibliografía}}}

\newcommand\portada{
	\begin{titlepage}
		\begin{center}
			{\large \bf HERRAMIENTA DE ESTUDIO PARA LAS MARATONES DE PROGRAMACIÓN PROMOVIDAS EN EL PROGRAMA DE INGENIERÍA DE SISTEMAS Y COMPUTACIÓN DE LA UNIVERSIDAD TECNOLÓGICA DE PEREIRA\par }	
			\vfill
			{\large\bf LINA MARCELA JIMÉNEZ BECERRA \par}
			\vfill
			{\large\bf UNIVERSIDAD TECNOLÓGICA DE PEREIRA  \par}
			{\large\bf FACULTAD DE INGENIERÍAS EEFC \par}
			{\large\bf INGENIERÍA DE SISTEMAS Y COMPUTACIÓN \par}
			{\large\bf PEREIRA\par}
			{\large\bf JUNIO 11 DE 2012 \par}
		\end{center}
	\end{titlepage}
}

\newcommand\contraportada{
	\begin{titlepage}
		\begin{center}
			{\large \bf HERRAMIENTA DE ESTUDIO PARA LAS MARATONES DE PROGRAMACIÓN PROMOVIDAS EN EL PROGRAMA DE INGENIERÍA DE SISTEMAS Y COMPUTACIÓN DE LA UNIVERSIDAD TECNOLÓGICA DE PEREIRA\par}
			\vfill
			{\large\bf LINA MARCELA JIMÉNEZ BECERRA \par}
			\vfill
			{\large\bf INFORME DE PROYECTO DE GRADO DE PREGRADO\par}
			\vfill
			{\large\bf UNIVERSIDAD TECNOLÓGICA DE PEREIRA  \par}
			{\large\bf FACULTAD DE INGENIERÍAS EEFC \par}
			{\large\bf INGENIERÍA DE SISTEMAS Y COMPUTACIÓN \par}
			{\large\bf PEREIRA\par}
			{\large\bf JUNIO 11 DE 2012 \par}
		\end{center}
	\end{titlepage}
}


\begin{document}

\portada

\contraportada


\chapter*{AGRADECIMIENTOS}

Al Ingeniero Hugo Humberto Morales Peña y al semillero de Investigación In-Sílico, por contribuir al desarrollo del presente proyecto con sus conocimientos y experiencia en maratones de programación.\\

A mi familia por su incondicional apoyo.\\

A la comunidad de Software Libre por compartir sus desarrollos y conocimientos con el resto de la humanidad, sin lo cual no sería posible desarrollar este tipo de proyectos.\\

Por último, pero no menos importante, agradezco a la Universidad Tecnológia de Pereira por brindarme herramientas y conocimientos que permitieron desarrollar el presente proyecto.

\renewcommand{\chaptertitlename}{CAPÍTULO}

%Cambiar el nombre Cuadro por tabla
\renewcommand{\tablename}{Tabla}

\renewcommand{\contentsname}{ÍNDICE GENERAL}
\tableofcontents

%Modificar el nombre: Índice de cuadros, por Índice de tablas
\renewcommand{\listtablename}{ÍNDICE DE TABLAS} 
\listoftables

%Cambiar el nombre Cuadro por tabla
%%%\renewcommand{\tablename}{Tabla}

%Modificar el nombre a mayúsculas
\renewcommand{\listfigurename}{ÍNDICE DE FIGURAS} 
\listoffigures

%%%\renewcommand\chaptername{CAPÍTULO}

\chapter*{RESUMEN}
El presente proyecto propone un diseño de solución para brindar una herramienta de estudio a los maratonistas del programa de Ingeniería de Sistemas y Computación de la Universidad Tecnológica de Pereira, y contribuir a la retroalimentación entre los mismos.\\

A través del documento se expone la problemática, los desafíos del proyecto, estado del arte de sistemas computacionales para juzgamiento de maratones de programación, los requerimientos de la herramienta de estudio, el análisis de herramientas computacionales de código abierto que funcionan como jueces de maratones de programación, el diseño de la solución, la implantación y prueba piloto de la misma.\\
 
Finalmente, se analizan los resultados de encuestas aplicadas, se elaboran las respectivas conclusiones y se plantean proyectos de investigación que se pueden derivar del presente trabajo investigativo.


\chapter{INTRODUCCIÓN}

\section{DEFINICIÓN DEL PROBLEMA}

\subsection{ANTECEDENTES}

Para promover la participación en competencias de programación, el Semillero de Investigación In-Sílico organiza maratones de programación, estás también son una forma de entrenar a los maratonistas menos experimentados antes de enfrentarse a las maratones colombianas organizadas por la REDIS/ACIS\footnote{Maratones Nacionales organizadas por la Red de Decanos y Directores de Ingeniería de Sistemas y Afines (REDIS), y la Asociación Colombiana de Ingenieros de Sistemas (ACIS).}.

Actualmente y para llevar a cabo tales competencias se viene utilizando el aplicativo PC\textasciicircum2\footnote{Programming Contest Control System (PC\textasciicircum2), es una herramienta computacional utilizada para someter problemas durante una maratón de programación.} y una de las razones por las cuales se utiliza es porque se ha seguido el estándar existente en las competencias del Circuito Colombiano de Maratones de Programación REDIS/ACIS, según el cual cada una de las sedes participantes a nivel nacional debe usarlo\footnote{Información extraída de: Guía para la configuración de una competencia del Circuito Colombiano de Maratones de Programación [en línea],\\
$<$http://acm.javeriana.edu.co/maratones/wp-content/uploads/descargas/GuiaConfiguracionCCMP.pdf$>$, Pag 4, [Consultado el 5 de Agosto de 2011].}, sin embargo, se han evidenciado una serie de características propias de la aplicación que no contribuyen a mejorar este tipo de eventos. Entre ellas:

	\begin{itemize}

	\item Los clientes del aplicativo PC\textasciicircum2 a través del cual los maratonistas envían la solución de los problemas, debe ser instalado en cada una de las máquinas pertenecientes a las salas de computo que han sido habilitadas para la competencia, lo que implica, limitar el número de equipos participantes a la cantidad de computadores configurados con el cliente, e instalar, configurar y probar la herramienta cada vez que se modifica la sala habilitada para la maratón.

	\item No es posible modificar la herramienta computacional debido a que no es Open-Source.\footnote{Información obtenida de: FAQ del proyecto PC\textasciicircum2, [en línea], $<$http://www.ecs.csus.edu/pc2/doc/faq/index.html\#GETSOURCEFAQ$>$, [Consultado el 8 de Agosto de 2011].}

	\end{itemize}

Tales características afectan negativamente el proceso de entrenamiento que se busca con las maratones lideradas por In-Sílico, puesto que impiden realizar postmaratón, es decir, los competidores no tienen cómo evaluar los problemas a los que se acaban de enfrentar con respecto a esos mismos casos de prueba de la competencia, de modo que puedan resolver los ejercicios que no les fue posible hacer durante la competencia o mejorar los algoritmos que ya habían planteado durante la misma.

Esto no es factible, en primer lugar porque los problemas son habilitados solamente para el periodo que dura la maratón de programación y los clientes autorizados para envío de las soluciones deben estar instalados en máquinas correspondientes a salas designadas para las competencias, habilitar una postmaratón con el actual aplicativo PC\textasciicircum2 es un proceso lento y desgastante\footnote{Según el Ingeniero Hugo Humberto Morales, promotor de estos eventos, el proceso se toma una semana y 2 horas.} porque es necesario gestionar la sala de computo, hacer pruebas técnicas a cada uno de los clientes y convocar nuevamente a los competidores.

En segundo lugar, no es posible acceder al código fuente del aplicativo y adicionarle funcionalidades que permitan generar un ambiente de retroalimentación.

Ante lo anterior y partiendo del hecho de que modificar un estándar no es un proceso inmediato, se ha evidenciado la necesidad de utilizar una herramienta diferente a PC\textasciicircum2 para las maratones que lidera el semillero, de modo que también sea una herramienta de estudio y aporte al verdadero propósito de estas actividades que es contribuir a la retroalimentación entre quienes participan.

El no contar con una herramienta computacional enfocada a la retroalimentación de los maratonistas, pone en riesgo la pérdida del esfuerzo que tanto el semillero como los maratonistas y el mismo programa han realizado al apoyar este tipo de eventos, pues desafortunadamente, en lo corrido del Circuito Colombiano de Maratones de Programación REDIS/ACIS del presente año se ha observado un índice de deserción del 54,35\%\footnote{Datos tomados de Listados oficiales del circuito REDIS/ACIS 2011, en los que participa la universidad.} en los competidores de la universidad.%%%
%\[pc^2\]

\subsection{FORMULACIÓN DEL PROBLEMA}

El programa de Ingeniería de Sistemas y Computación de la Universidad Tecnológica de Pereira no cuenta con una herramienta computacional que permita juzgar los problemas de las maratones de programación con exactamente los mismos casos de prueba de la competencia, durante un periodo de tiempo posterior a las competencias en las que participa, de modo que permita hacer postmaratones y brinde un espacio de retroalimentación entre los competidores.


\section{JUSTIFICACIÓN}

La solución al conjunto de problemas habilitados en una maratón de programación es juzgado de acuerdo a su desempeño frente a un conjunto de casos de prueba específicos de esa competencia, por tanto, la valoración que se obtenga por determinado problema no será necesariamente el mismo si se juzga frente a otros casos de prueba, este es uno de los aspectos que evidencia la importancia de brindar una herramienta en la que el maratonista evalúe su desempeño, puesto que este fácilmente podría buscar un juez diferente al de la competencia y calificar sus problemas, sin embargo, ya no estaría midiendo su desempeño frente al ámbito de la competencia que acaba de pasar.

El hecho de que el aplicativo empleado actualmente para llevar a cabo las maratones impida realizar una retroalimentación de las mismas, evidencia una clara falencia que debe ser superada, puesto que si bien es importante promover la participación en las maratones de programación, también lo es suministrar una herramienta de estudio que brinde un ambiente de retroalimentación entre los maratonistas.

Con una herramienta de estudio postmaratón es posible contribuir al proceso de entrenamiento puesto que los competidores podrían tratar de resolver o mejorar aquellos problemas con los que tuvieron dificultades durante la competencia y además podrían compartir entre ellos mismos los métodos utilizados para resolverlos.
Si se cuenta con una herramienta de estudio de este estilo, es posible  hacer un seguimiento a los competidores después de finalizada la maratón, donde se evidencie si estos intentaron resolver los problemas que no les fue posible solucionar.
	
Es importante trabajar por la continuidad de las maratones de programación que se han venido llevando a cabo en el programa de Ingeniería de Sistemas y Computación, estas son una forma de darle reconocimiento al programa y a la misma universidad, tanto a nivel nacional como internacional, en repetidas ocasiones los equipos de la Universidad Tecnológica de Pereira han ganado a nivel nacional en el Circuito Colombiano de Maratones de Programación REDIS/ACIS:

	\begin{itemize}

	\item Décima Competencia del año 2010\footnote{Información extraída de los resultados oficiales de la competencia [en línea],\\$<$http://acm.javeriana.edu.co/maratones/wp-content/uploads/2011/01/total.htm$>$, [Consultado el 11 de Agosto de 2011].}.

	\item Tercera Competencia del año 2011\footnote{Información obtenida de los resultados oficiales de la competencia [en línea],\\$<$http://acm.javeriana.edu.co/maratones/wp-content/uploads/2011/04/board.htm$>$, [Consultado el 24 de Agosto de 2011].}.

	\item Cuarta Competencia del año 2011\footnote{Información consultada en los resultados oficiales de la competencia [en línea],\\$<$http://acm.javeriana.edu.co/maratones/wp-content/uploads/2011/05/board.htm$>$, [Consultado el 24 de Agosto de 2011].}.

	\item Octava Competencia del año 2011\footnote{Información extraída de los resultados oficiales de la competencia [en línea],\\$<$http://acm.javeriana.edu.co/maratones/wp-content/uploads/2011/05/board.htm$>$, [Consultado el 29 de Agosto de 2011].}.

	\item Décima Competencia del año 2011\footnote{Información obtenida de los resultados oficiales de la competencia [en línea],\\$<$http://acm.javeriana.edu.co/maratones/board/$>$, [Consultado el 3 de Septiembre de 2011].}.

	\end{itemize}

Utilizar una herramienta opcional a PC\textasciicircum2 que permita además la transferencia del conocimiento entre quienes participan en este tipo de eventos, posibilita que la sede Pereira adquiera una importante experiencia que puede ser compartida con el resto de sedes y competidores a nivel nacional.


\section{OBJETIVOS}

\subsection{OBJETIVO GENERAL}

Adaptar un juez de maratones de programación para construir una herramienta computacional que brinde una etapa adicional de postmaratón para las competencias de programación, llevadas a cabo en el Programa de Ingeniería de Sistemas y Computación de la Universidad Tecnológica de Pereira.

\subsection{OBJETIVOS ESPECÍFICOS}

	\begin{itemize}

	\item Definir los requerimientos para el diseño de una herramienta computacional orientada a la web que brinde una etapa adicional de postmaratón para las competencias de programación llevadas a cabo en el Programa.

	\item Realizar un estudio que permita seleccionar una herramienta computacional de código abierto que funcione como juez de maratones de programación y se pueda adaptar a las necesidades de este proyecto.

	\item Adaptar la herramienta seleccionada de modo que cumpla con los requerimientos  previamente definidos.

	\item Implantar la herramienta computacional en un servidor del programa para probar su funcionalidad y puesta a punto.

	\item Implantar una prueba piloto sobre la herramienta computacional para medir los índices de retroalimentación postmaratón.

	\item Generar la documentación de la herramienta computacional.

	\end{itemize}

\section{MARCO REFERENCIAL}

\subsection {MARCO HISTÓRICO}
	
Un referente histórico de las maratones de programación es la  \emph{Association for Computer Machinery} (ACM), una de las principales organizaciones educativas en cuanto a informática en todo el mundo y que ha promovido este tipo de competencias desde 1977\footnote{Dato obtenido de ACM ICPC \emph{The Early Years ACM Contest Finals} [en línea],\\$<$http://cm.baylor.edu/ICPCWiki/Wiki.jsp?page=The\%20Early\%20Years$>$, [Consultado el 5 de Septiembre de 2011].}.

Por medio de las maratones de programación, tanto la ACM como la industria y la academia animan y centran la atención del público en la próxima generación de profesionales de la algoritmia mientras que incentivan a sus participantes en la búsqueda por la excelencia.

	
En Colombia, la Asociación Colombiana de Ingenieros de Sistemas (ACIS) y la Red de Decanos y Directores de Ingeniería de Sistemas y Afines (REDIS) han venido colaborando estrechamente desde 2004\footnote{Información extraída de REDIS, Proyectos: Maratón de Programación [en línea],\\$<$http://rediscol.org/cms/proyectos/72-maratón-de-programacion.html$>$, [Consultado el 5 de Septiembre de 2011].}, en la organización de las maratones de programación a nivel universitario y a nivel nacional, con el propósito de generar un espacio de sana competencia y entrenamiento para estudiantes de diferentes universidades del país, estas se enmarcan dentro del circuito mundial de maratones de programación ACM  \emph{International Collegiate Programming Contest} (ACM ICPC).

\subsection{ESTADO DEL ARTE}

En el ámbito mundial de las maratones de programación existen diferentes tipos de  \emph{contests}\footnote{Se hace referencia a Concursos de programación.}, tales como el ACM  \emph{regional contests}\footnote{ACIS, Maratón Regional Latinoamericana ACM ICPC 2011 [en línea], $<$http://www.acis.org.co/index.php?id=1677$>$}, el \emph{International Olympiad in Informatics} (IOI)\footnote{IOI Official Regulations [en línea], $<$http://ioinformatics.org/rules/index.shtml$>$.}, el \emph{Central European Olympiad in Informatics} (CEOI)\footnote{CEOI Regulations [en línea], $<$http://ceoi2011.mimuw.edu.pl/$>$.}, el \emph{Google Code Jam}\footnote{Competing in a Round: Mechanics [en línea], $<$http://code.google.com/codejam/faq.html$>$.}, el ACM \emph{International Collegiate Programming Contest} (ACM ICPC)\footnote{Policies and Procedures for the ACM International Collegiate Programming Contest [en línea], $<$http://cm.baylor.edu/ICPCWiki/attach/StaticResources/ICPC\%20Policies\%20and\%20Procedures.pdf$>$.}, el \emph{Internet Problem Solving Contest}(IPSC)\footnote{IPSC Terms and Conditions [en línea], $<$http://ipsc.ksp.sk/terms.php$>$.}, entre otros. \newline
Tales concursos pueden clasificarse en \emph{Real-Time Contests}  y \emph{Online Contests}, si bien, ambos tipos poseen un conjunto de reglas  previamente establecidas por sus organizadores, los \emph{Real-Time} suelen ser más estrictos porque se requiere la presencia física de los maratonistas en el lugar establecido para la competencia.

De las competencias mencionadas, sobresalen como las más prestigiosas\footnote{Información tomada de Common Mistakes in Online and Real-time Contests [en línea], $<$http://dl.acm.org/citation.cfm?id=1375976\&bnc=1$>$.[Consultado el 12 de Septiembre de 2011], pag 1.} la competencia ACM ICPC en el campo de las \emph{Real-Time} e IPSC en las maratones \emph{Online}.

En el país el Circuito Colombiano de Maratones de Programación REDIS/ACIS se enmarca bajo el modelo de ACM ICPC, de modo que es un circuito de entrenamiento para la Maratón Nacional de ACM ICPC, que se realiza una sola vez al año, mientras el circuito de entrenamiento realiza competencias durante todo el año.

De acuerdo al tipo de concursos mencionados anteriormente, existen herramientas computacionales que permiten llevarlos a cabo, son conocidas como \emph{judge contest}\footnote{Se hace referencia a un sistema juez para concursos de maratones de programación} y consisten en un sistema que recibe el código fuente enviado por el maratonista como solución a un problema de la competencia, para compilarlo y ejecutarlo con los casos de prueba correspondientes, según el desempeño que presente el programa, el sistema devuelve al competidor una respuesta, entre las posibles respuestas se encuentran: \emph{Correct, Presentation Error, Runtime Error, Time Limit Exceeded,} etc.\newline
El algoritmo enviado debe correr bajo restricciones establecidas en el sistema, tales como tamaño limite, memoria limite, restricciones de seguridad, etc.

En su mayoría, dichas herramientas han sido desarrolladas por los propios gestores de los diferentes concursos existentes a nivel  mundial, algunas de estas están a disposición del público interesado, bien sea como  \emph{online judge}  o como aplicaciones descargables para su propio uso.

Los \emph{online judge} son aplicaciones web que se caracterizan por:

	\begin{itemize}

	\item Poseer una base de datos con problemas de programación clasificados en diferentes categorías.
	\item Habilitar sus propios concursos de programación.

	\item Contar con sus propios casos de prueba.

	\item Suministrar cuentas de usuarios para que el público interesado pruebe los problemas o participe en los concursos.

	\item Suministrar estadísticas del desempeño de los usuarios.

	\end{itemize}


Entre los  \emph{online judge} disponibles, se encuentran:

	\begin{itemize}

	\item \emph{UVa Online Judge}\footnote{UVa Online Judge [aplicación en línea], $<$http://uva.onlinejudge.org/$>$}, desarrollado por la universidad de Valladolid en España.\\
Dentro del conjunto de problemas de programación que ofrece, se encuentran los usados en las competencias regionales y mundiales de la ACM ICPC.

	\item \emph{Timus Online Judge}\footnote{Timus Online Judge [aplicación en línea], $<$http://acm.timus.ru/$>$}, implementado y mantenido por \emph{Ural State University} de Rusia, brinda acceso entre otros problemas, a los utilizados en la \emph{Northeastern European Regional Contest} (NEERC)\footnote{NEERC [aplicación en línea], $<$ http://neerc.ifmo.ru/information/about.html$>$}.

	\item \emph{HDU Online Judge System}\footnote{HDU Online Judge System [aplicación en línea], $<$http://acm.hdu.edu.cn/$>$}, perteneciente a Hangzhou Dianzi University de China.

	\item \emph{Internet Problem Solving Contest}\footnote{IPSC [aplicación en línea], $<$http://www.spoj.pl/$>$}, es un juez en línea enfocado a \emph{Online Contest}, útil para entrenamiento en equipo.

	\item \emph{Peking University Online Judge}\footnote{POJ [aplicación en línea], $<$http://poj.org/$>$}, presenta además, la opción de solicitar la publicación de problemas o habilitación de maratones por parte de los usuarios.

	\item \emph{ZOJ}\footnote{ZOJ [aplicación en línea], $<$http://acm.zju.edu.cn/onlinejudge/$>$}, se trata del juez en línea de la universidad de Zhejiang en China, miembro del equipo ACM ICPC.

	\item \emph{USACO Training Program Gateway}\footnote{USACO [aplicación en línea], $<$http://train.usaco.org/usacogate$>$}, este juez está dirigido especialmente a estudiantes de colegio en los  Estados Unidos de Norteamérica, con el fin de prepararlos para las IOI, sin embargo, ofrece sus servicios al público de maratonistas a nivel mundial.

	\item \emph{Sphere Online Judge}\footnote{SPOJ [aplicación en línea], $<$http://www.spoj.pl/$>$}, además de poseer su propio set de problemas, presta el servicio de habilitar concursos y publicar ejercicios.

	\item \emph{TJU Online Judge}\footnote{TUJ [aplicación en línea], $<$http://acm.tju.edu.cn/toj/$>$}, sistema juez perteneciente a la universidad China \emph{Tianjin University}, brinda problemas tipo ACM ICPC.

	\end{itemize}

Las anteriores herramientas computacionales son una muestra del software existente para maratones de programación, en idioma ingles, ya que debido a la variedad de concursos de programación que se desarrollan en diferentes lugares del mundo, el idioma no siempre es ingles, lo que representa una barrera a la hora de utilizarlos.\newline

En lo que respecta a \emph{judges} disponibles como aplicaciones descargables, es posible listar:

	\begin{itemize}

	\item \emph{Programming Contest Control System}, PC\textasciicircum2, es una herramienta computacional que sirve para calificar(juzgar) problemas durante una maratón de programación, se basa en una arquitectura cliente servidor con clientes para los equipos participantes (teams), administrador y juez de la maratón de programación en curso.\newline
Los maratonistas envían la solución de los problemas a través del cliente teams para que sean calificados por el servidor. La persona encargada que desempeñar el rol de juez es quien a través del cliente juez determina si la calificación es o no apropiada.\newline
PC\textasciicircum2 fue desarrollado en \emph{California State University}, Sacramento (CSUS), está hecho en java, su actual versión es V9\footnote{PC\textasciicircum2 [Aplicación descargable], $<$http://www.ecs.csus.edu/pc2/$>$}.

	\item \emph{RuscalTech Contest Control System}\footnote{RuscalTech Contest Control System [Aplicación descargable], $<$http://rtccs.sourceforge.net/$>$}, después de PC\textasciicircum2 este juez es bastante reconocido, está escrito en C\#, Visual Basic y .NET.

	\item \emph{Debuxxe - Computer Olympiad Trainer}\footnote{Debuxxe [Aplicación descargable], $<$http://sourceforge.net/projects/debuxxe/$>$}, sistema juez escrito en VB6.0, no está enfocado a la competencia de varios equipos sino al entrenamiento personal del maratonista.

	\item \emph{AceJudge}\footnote{AceJudgehttp [Aplicación descargable], $<$http://sourceforge.net/projects/acejudge/$>$}, está desarrollado en C\# y se especializa en concursos de programación.
%%%%CORREGIR APOSTROFE

	\item \emph{Nafis' Programming Contest Judge} Tool\footnote{Nafis' [Aplicación descargable], $<$http://sourceforge.net/projects/judge-tool/}, se trata de un sistema cliente servidor, escrito en C y C++, según su página oficial de desarrollo, posee todas las características de PC\textasciicircum2 pero de una forma más sencilla y sin los bugs que éste suele presentar.

	\item \emph{DOMjudge programming contest jury system}\footnote{DOMjudge [Aplicación descargable], $<$http://domjudge.sourceforge.net/$>$}, es un sistema cliente servidor, escrito en PHP, shell-script y C/C++.

\item\emph{gCoder}\footnote{gCoder [Aplicación descargable], $<$http://sourceforge.net/projects/gcoder/$>$}, se basa en un sistema cliente servidor, está escrito en Python.

	\end{itemize}

\emph{Judges online} o instalables pueden ser utilizadas para el entrenamiento y/o para la competencia, sin embargo, su uso está limitado a las condiciones de sus administradores, en el caso de los \emph{online} o a las funcionalidades que estos ya traen por defecto, en el caso de los instalables, en consecuencia, es común encontrar herramientas personalizadas para las características específicas de determinados concursos.

En Colombia las diferentes universidades que promueven las maratones de programación, usan como herramienta de estudio, bien sea, PC\textasciicircum2 o algún otro juez de programación pertenecientes a universidades extranjeras, es decir, no se encuentran herramientas de estudio desarrolladas por y para las necesidades especificas de las maratones de las diferentes universidades del país.

En el ámbito de la Universidad Tecnológica de Pereira, no se encuentran aplicaciones desarrolladas para competencias de programación, situación que no debe de extrañar, sencillamente porque el programa de Ingeniería de Sistemas y Computación es pionero en esta actividad dentro de la institución.

\subsection {MARCO LEGAL}

Si bien, los objetivos del presente trabajo investigativo hacen referencia a software de código abierto, es importante mencionar que en el contexto del software libre se utilizan los términos software libre y software de código abierto, ambos poseen modelos de desarrollo similares, sin embargo, difieren en sus planteamientos filosóficos.\\
El término Software libre se enfoca en las libertades que se le otorga al usuario, mientras que código abierto, se centra en las ventajas de su modelo de desarrollo.\\
Ambos conceptos están contenidos en el término software libre y de código abierto (FOSS o FLOSS).\\

La organización Free Software Foundation(FSF) representa el software libre, mientras que, Open Source Iniciative(OSI) representa el software de código abierto.\\

Según la FSF para que determinado software sea considerado como software libre, debe cumplir con las siguientes libertades\footnote{Información tomada de la página oficial de la Free Software Foundation [en línea], $<$http://www.gnu.org/philosophy/free-sw.es.html$>$. [Consultado 8 de Junio de 2012]}:

	\begin{itemize}
		\item \textbf{libertad 0}: La libertad de ejecutar el programa para cualquier propósito.
		\item \textbf{libertad 1}: La libertad de estudiar cómo funciona el programa, y cambiarlo para que haga lo que usted quiera. El acceso al código fuente es una condición necesaria para ello.
		\item \textbf{libertad 2}: La libertad de redistribuir copias para ayudar a su prójimo.
		\item \textbf{libertad 3}: La libertad de distribuir copias de sus versiones modificadas a terceros. Esto le permite ofrecer a toda la comunidad la oportunidad de beneficiarse de las modificaciones. El acceso al código fuente es una condición necesaria para ello.
	\end{itemize}

En lo que respecta al software de código abierto, la OSI tiene sus  propios parámetros\footnote{Información tomada de la página oficial de Open Source Iniciative [en línea], $<$http://www.opensource.org/docs/osd$>$. [Consultado 8 de Junio de 2012]} para determinar un software como abierto, estos son:

	\begin{enumerate}	
		\item \textbf{Libre redistribución}: el software debe poder ser regalado o vendido libremente.
		\item \textbf{Código fuente}: el código fuente debe estar incluido u obtenerse libremente.
		\item \textbf{Trabajos derivados}: la redistribución de modificaciones debe estar permitida.
		\item \textbf{Integridad del código fuente del autor}: las licencias pueden requerir que las modificaciones sean redistribuidas sólo como parches.
		\item \textbf{Sin discriminación de personas o grupos}: nadie puede dejarse fuera.
		\item \textbf{Sin discriminación de áreas de iniciativa}: los usuarios comerciales no pueden ser excluidos.
		\item \textbf{Distribución de la licencia}: deben aplicarse los mismos derechos a todo el que reciba el programa.
		\item \textbf{La licencia no debe ser específica de un producto}: el programa no puede licenciarse solo como parte de una distribución mayor.
		\item \textbf{La licencia no debe restringir otro software}: la licencia no puede obligar a que algún otro software que sea distribuido con el software abierto deba también ser de código abierto.
		\item \textbf{La licencia debe ser tecnológicamente neutral}: no debe requerirse la aceptación de la licencia por medio de una interfaz específica.
	\end{enumerate}

Adicional a los términos expuestos, el concepto \textbf{copylef} es bastante utilizado en el mundo del software libre. Básicamente, el copyleft es un método general para hacer un programa (u otro tipo de trabajo) libre, exigiendo que todas las versiones modificadas y extendidas del mismo sean también libres\footnote{Definición tomada de la web site de la FSF [en línea], $<$http://www.gnu.org/copyleft/copyleft.html$>$}.

Hecha la aclaración de términos, es pertinente mencionar las principales licencias de software libre y de código abierto (FOSS o FLOSS):\\

\textbf{GNU General Public License(GNU GPL)}:\\
La licencia Publica General de GNU o GNU GPL es una de las más utilizadas para la publicación del software de GNU, fue creada por la FSF en 1989; usa copylef para proteger legalmente las libertades del usuario, es decir, que cuando se redistribuye el programa, no se pueden agregar restricciones para denegar a las demás personas las libertades principales del software libre.\\
GPLv3 es la actual versión de la General Public Licence.\\

Existen otras licencias de software libre que se clasifican como compatibles o incompatibles con la GPL, entre las consideradas como compatibles se encuentran:

	\begin{itemize}
		\item \textbf{Licencia Pública General Reducida de GNU o GNU LGPL}:\\
Se trata de una licencia de software libre que permite adherir módulos privativos, motivo por el cual, no se considera una sólida licencia copyleft.\\
La actual versión de la  LGPL\footnote{Obtener más información de la licencia LGPL [en línea], $<$http://www.gnu.org/licenses/lgpl.html$>$} es la versión 3.\\

		\item \textbf{Licencia X11\footnote{Especificaciones de la licencia X11 [en línea], $<$http://www.xfree86.org/3.3.6/COPYRIGHT2.html\#3$>$, [Consultado 8 de Junio de 2012]}}:\\
Esta licencia pertenece al Massachusetts Institute of Technology (MIT), por ello, también es conocida como  MIT License/X11, se trata de una licencia permisiva sin copylef que posibilita reutilizar el software así licenciado tanto para ser software libre como para ser software no libre, permitiendo no liberar los cambios realizados al programa original.\\
Es utilizada por el software que muestra la información de manera gráfica X Window System.\\

		\item \textbf{Licencia BSD Modificada}:\\ 
La licencia BSD Modificada\footnote{Es posible obtener más detalles de los terminos de esta licencia, [en línea], $<$http://www.xfree86.org/3.3.6/COPYRIGHT2.html\#5$>$} es la licencia BSD original, sólo que no incluye la clausula de publicidad contenida en la primera, al eliminarla, se evita que toda mención publicitaria incluya una larga lista de instituciones y contribuyentes del software que se distribuye.
	\end{itemize}

Por otra parte, entre las licencias consideradas como incompatible con la GPL, están:

	\begin{itemize}
		\item \textbf{BSD original}:\\
Es una licencia no copylef, otorgada principalmente a los sistemas Berkeley Software Distribution(BSD), bastante criticada entre la comunidad de software libre por su clausula de publicidad, la cual indica que toda mención publicitaria del software licenciado bajo la misma debe incluir la siguiente frase: ``This product includes software developed by the University of California, Berkeley and its contributors''\footnote{Información tomada de la FSF [en línea], $<$http://www.gnu.org/philosophy/bsd.es.html$>$}, sin embargo, tal requisito se torna poco práctico cuando otros desarrolladores incluyen su propio nombre y el de sus instituciones, el resultado es una larga lista de frases que tiende a crecer, por lo cual, surge la Licencia BSD Modificada, mencionada anteriormente.\\

		\item \textbf{Lucent Public License\footnote{Especificaciones de esta licencia [en línea], $<$http://plan9.bell-labs.com/plan9/license.html$>$}}:\\
Es una licencia de software libre, entre las razones por las que la FSF la considera incompatible con la GPL, está la posibilidad de que el autor original del software aproveche el trabajo de otros colaboradores sin reconocer la autoría de los mismos, puesto que contiene una clausula según la cual, se pondría fin a la licencia si se toma una acción de propiedad intelectual contra los autores del software existe y a partir del cual se está desarrollando.\\
		\item \textbf{Mozilla Public License(MPL) versión 1.1\footnote{Términos de la licencia MPL, [en línea], $<$http://www.mozilla.org/MPL/1.1/$>$}}:\\
Es una licencia de software libre que no posee un copylef fuerte, pues aunque cumple con las cuatro libertades del software libre y los parámetros de código abierto definidos por la OSI, contempla la opción de hacer reutilización no libre del software. Un módulo cubierto por la GPL y otro por la MPL no pueden ser legalmente enlazados. 
	
		\item \textbf{Licencia Apache\footnote{Especificaciones de la licencia Apache, [en línea], $<$http://www.apache.org/licenses/LICENSE-1.1$>$}}:\\
La licencia Apache es una licencia libre sin copylef, puesto que no requiere la redistribución del código fuente al publicar versiones modificadas, siendo posible liberar el software modificado con licencias diferentes.\\
La única exigencia de la licencia es informar a los usuarios receptores que el software liberado contiene código con  la licencia Apache.\\
Concretamente, las versiones de la licencia Apache no compatibles con la GPL son las versiones 1.0 y 1.1.
	\end{itemize}

Existe una importante lista de de licencias compatibles e incompatibles con la GPL, estas pueden ser consultadas en la página oficial de la FSF\footnote{Para ver el listado total de las licencias compatibles con la GPL acceder al link: $<$http://www.gnu.org/licenses/license-list.es.html\#GPLCompatibleLicenses$>$, [Consultado 8 de Junio de 2012]}.\\

Adicianal a las licencias de software expuestas anteriormente, es importante mencionar la licencia de documentación libre de GNU con la que se publicará el presente trabajo investigativo.\\

\textbf{GNU Free Documentation Licence}:\\
La licencia de Documentación Libre de GNU usa copyleft, su actual versión es la 1.3.\\
Sus especificaciones son las siguientes\footnote{Información tomada de la página oficial de la FSF,  [en línea], $<$http://www.gnu.org/copyleft/fdl.html$>$, [Consultado el 9 de Junio de 2012]}:\\

0. PREÁMBULO

El propósito de esta Licencia es permitir que un manual, libro de texto, u otro documento escrito sea libre en el sentido de libertad: asegurar a todo el mundo la libertad efectiva de copiarlo y redistribuirlo, con o sin modificaciones, de manera comercial o no. En segundo término, esta Licencia proporciona al autor y al editor una manera de obtener reconocimiento por su trabajo, sin que se le considere responsable de las modificaciones realizadas por otros.

Esta Licencia es de tipo copyleft, lo que significa que los trabajos derivados del documento deben a su vez ser libres en el mismo sentido. Complementa la Licencia Pública General de GNU, que es una licencia tipo copyleft diseñada para el software libre.

Hemos diseñado esta Licencia para usarla en manuales de software libre, ya que el software libre necesita documentación libre: un programa libre debe venir con manuales que ofrezcan la mismas libertades que el software. Pero esta licencia no se limita a manuales de software; puede usarse para cualquier texto, sin tener en cuenta su temática o si se publica como libro impreso o no. Recomendamos esta licencia principalmente para trabajos cuyo fin sea instructivo o de referencia.

1. APLICABILIDAD Y DEFINICIONES

Esta Licencia se aplica a cualquier manual u otro trabajo, en cualquier soporte, que contenga una nota del propietario de los derechos de autor que indique que puede ser distribuido bajo los términos de esta Licencia. Tal nota garantiza en cualquier lugar del mundo, sin pago de derechos y sin límite de tiempo, el uso de dicho trabajo según las condiciones aquí estipuladas. En adelante la palabra Documento se referirá a cualquiera de dichos manuales o trabajos. Cualquier persona es un licenciatario y será referido como Usted. Usted acepta la licencia si copia, modifica o distribuye el trabajo de cualquier modo que requiera permiso según la ley de propiedad intelectual.

Una Versión Modificada del Documento significa cualquier trabajo que contenga el Documento o una porción del mismo, ya sea una copia literal o con modificaciones y/o traducciones a otro idioma.

Una Sección Secundaria es un apéndice con título o una sección preliminar del Documento que trata exclusivamente de la relación entre los autores o editores y el tema general del Documento (o temas relacionados) pero que no contiene nada que entre directamente en dicho tema general (por ejemplo, si el Documento es en parte un texto de matemáticas, una Sección Secundaria puede no explicar nada de matemáticas). La relación puede ser una conexión histórica con el tema o temas relacionados, o una opinión legal, comercial, filosófica, ética o política acerca de ellos.

Las Secciones Invariantes son ciertas Secciones Secundarias cuyos títulos son designados como Secciones Invariantes en la nota que indica que el documento es liberado bajo esta Licencia. Si una sección no entra en la definición de Secundaria, no puede designarse como Invariante. El documento puede no tener Secciones Invariantes. Si el Documento no identifica las Secciones Invariantes, es que no las tiene.

Los Textos de Cubierta son ciertos pasajes cortos de texto que se listan como Textos de Cubierta Delantera o Textos de Cubierta Trasera en la nota que indica que el documento es liberado bajo esta Licencia. Un Texto de Cubierta Delantera puede tener como mucho 5 palabras, y uno de Cubierta Trasera puede tener hasta 25 palabras.

Una copia Transparente del Documento, significa una copia para lectura en máquina, representada en un formato cuya especificación está disponible al público en general, apto para que los contenidos puedan ser vistos y editados directamente con editores de texto genéricos o (para imágenes compuestas por puntos) con programas genéricos de manipulación de imágenes o (para dibujos) con algún editor de dibujos ampliamente disponible, y que sea adecuado como entrada para formateadores de texto o para su traducción automática a formatos adecuados para formateadores de texto. Una copia hecha en un formato definido como Transparente, pero cuyo marcaje o ausencia de él haya sido diseñado para impedir o dificultar modificaciones posteriores por parte de los lectores no es Transparente. Un formato de imagen no es Transparente si se usa para una cantidad de texto sustancial. Una copia que no es Transparente se denomina Opaca.

Como ejemplos de formatos adecuados para copias Transparentes están ASCII puro sin marcaje, formato de entrada de Texinfo, formato de entrada de LaTeX, SGML o XML usando una DTD disponible públicamente, y HTML, PostScript o PDF simples, que sigan los estándares y diseñados para que los modifiquen personas. Ejemplos de formatos de imagen transparentes son PNG, XCF y JPG. Los formatos Opacos incluyen formatos propietarios que pueden ser leídos y editados únicamente en procesadores de palabras propietarios, SGML o XML para los cuáles las DTD y/o herramientas de procesamiento no estén ampliamente disponibles, y HTML, PostScript o PDF generados por algunos procesadores de palabras sólo como salida.

La Portada significa, en un libro impreso, la página de título, más las páginas siguientes que sean necesarias para mantener, de manera legible, el material que esta Licencia requiere en la portada. Para trabajos en formatos que no tienen página de portada como tal, Portada significa el texto cercano a la aparición más prominente del título del trabajo, precediendo el comienzo del cuerpo del texto.

El Editor se refiere a cualquier persona o entidad que distribuya copias del Documento a el público.

Una sección Titulada XYZ significa una parte del Documento cuyo título es precisamente XYZ o contiene XYZ entre paréntesis, a continuación de texto que traduce XYZ a otro idioma (aquí XYZ se refiere a nombres de sección específicos mencionados más abajo, como Agradecimientos, Dedicatorias , Aprobaciones o Historia). Conservar el Título de tal sección cuando se modifica el Documento significa que permanece una sección Titulada XYZ según esta definición.[3]

El Documento puede incluir Limitaciones de Garantía cercanas a la nota donde se declara que al Documento se le aplica esta Licencia. Se considera que estas Limitaciones de Garantía están incluidas, por referencia, en la Licencia, pero sólo en cuanto a limitaciones de garantía: cualquier otra implicación que estas Limitaciones de Garantía puedan tener es nula y no tiene efecto en el significado de esta Licencia.

2. COPIA LITERAL

Usted puede copiar y distribuir el Documento en cualquier soporte, sea en forma comercial o no, siempre y cuando esta Licencia, las notas de copyright y la nota que indica que esta Licencia se aplica al Documento se reproduzcan en todas las copias y que usted no añada ninguna otra condición a las expuestas en esta Licencia. Usted no puede usar medidas técnicas para obstruir o controlar la lectura o copia posterior de las copias que usted haga o distribuya. Sin embargo, usted puede aceptar compensación a cambio de las copias. Si distribuye un número suficientemente grande de copias también deberá seguir las condiciones de la sección 3.

Usted también puede prestar copias, bajo las mismas condiciones establecidas anteriormente, y puede exhibir copias públicamente.

3. COPIADO EN CANTIDAD

Si publica copias impresas del Documento (o copias en soportes que tengan normalmente cubiertas impresas) que sobrepasen las 100, y la nota de licencia del Documento exige Textos de Cubierta, debe incluir las copias con cubiertas que lleven en forma clara y legible todos esos Textos de Cubierta: Textos de Cubierta Delantera en la cubierta delantera y Textos de Cubierta Trasera en la cubierta trasera. Ambas cubiertas deben identificarlo a Usted clara y legiblemente como editor de tales copias. La cubierta debe mostrar el título completo con todas las palabras igualmente prominentes y visibles. Además puede añadir otro material en las cubiertas. Las copias con cambios limitados a las cubiertas, siempre que conserven el título del Documento y satisfagan estas condiciones, pueden considerarse como copias literales.

Si los textos requeridos para la cubierta son muy voluminosos para que ajusten legiblemente, debe colocar los primeros (tantos como sea razonable colocar) en la verdadera cubierta y situar el resto en páginas adyacentes.

Si Usted publica o distribuye copias Opacas del Documento cuya cantidad exceda las 100, debe incluir una copia Transparente, que pueda ser leída por una máquina, con cada copia Opaca, o bien mostrar, en cada copia Opaca, una dirección de red donde cualquier usuario de la misma tenga acceso por medio de protocolos públicos y estandarizados a una copia Transparente del Documento completa, sin material adicional. Si usted hace uso de la última opción, deberá tomar las medidas necesarias, cuando comience la distribución de las copias Opacas en cantidad, para asegurar que esta copia Transparente permanecerá accesible en el sitio establecido por lo menos un año después de la última vez que distribuya una copia Opaca de esa edición al público (directamente o a través de sus agentes o distribuidores).

Se solicita, aunque no es requisito, que se ponga en contacto con los autores del Documento antes de redistribuir gran número de copias, para darles la oportunidad de que le proporcionen una versión actualizada del Documento.

4. MODIFICACIONES

Puede copiar y distribuir una Versión Modificada del Documento bajo las condiciones de las secciones 2 y 3 anteriores, siempre que usted libere la Versión Modificada bajo esta misma Licencia, con la Versión Modificada haciendo el rol del Documento, por lo tanto dando licencia de distribución y modificación de la Versión Modificada a quienquiera posea una copia de la misma. Además, debe hacer lo siguiente en la Versión Modificada:

A. Usar en la Portada (y en las cubiertas, si hay alguna) un título distinto al del Documento y de sus versiones anteriores (que deberían, si hay alguna, estar listadas en la sección de Historia del Documento). Puede usar el mismo título de versiones anteriores al original siempre y cuando quien las publicó originalmente otorgue permiso.
B. Listar en la Portada, como autores, una o más personas o entidades responsables de la autoría de las modificaciones de la Versión Modificada, junto con por lo menos cinco de los autores principales del Documento (todos sus autores principales, si hay menos de cinco), a menos que le eximan de tal requisito.
C. Mostrar en la Portada como editor el nombre del editor de la Versión Modificada.
D. Conservar todas las notas de copyright del Documento.
E. Añadir una nota de copyright apropiada a sus modificaciones, adyacente a las otras notas de copyright.
F. Incluir, inmediatamente después de las notas de copyright, una nota de licencia dando el permiso para usar la Versión Modificada bajo los términos de esta Licencia, como se muestra en el Apéndice [Apéndice] al final de este documento.
G. Conservar en esa nota de licencia el listado completo de las Secciones Invariantes y de los Textos de Cubierta que sean requeridos en la nota de Licencia del Documento original.
H. Incluir una copia sin modificación de esta Licencia.
I. Conservar la sección Titulada Historia, conservar su Título y añadirle un elemento que declare al menos el título, el año, los nuevos autores y el editor de la Versión Modificada, tal como figuran en la Portada. Si no hay una sección Titulada Historia en el Documento, crear una estableciendo el título, el año, los autores y el editor del Documento, tal como figuran en su Portada, añadiendo además un elemento describiendo la Versión Modificada, como se estableció en la oración anterior.
J. Conservar la dirección en red, si la hay, dada en el Documento para el acceso público a una copia Transparente del mismo, así como las otras direcciones de red dadas en el Documento para versiones anteriores en las que estuviese basado. Pueden ubicarse en la sección Historia. Se puede omitir la ubicación en red de un trabajo que haya sido publicado por lo menos cuatro años antes que el Documento mismo, o si el editor original de dicha versión da permiso.
K. En cualquier sección Titulada Agradecimientos o Dedicatorias, conservar el Título de la sección y conservar en ella toda la sustancia y el tono de los agradecimientos y/o dedicatorias incluidas por cada contribuyente.
L. Conservar todas las Secciones Invariantes del Documento, sin alterar su texto ni sus títulos. Números de sección o el equivalente no son considerados parte de los títulos de la sección.
M. Borrar cualquier sección titulada Aprobaciones. Tales secciones no pueden estar incluidas en las Versiones Modificadas.
N. No cambiar el título de ninguna sección existente a Aprobaciones ni a uno que entre en conflicto con el de alguna Sección Invariante.
O. Conservar todas las Limitaciones de Garantía.
Si la Versión Modificada incluye secciones o apéndices nuevos que califiquen como Secciones Secundarias y contienen material no copiado del Documento, puede opcionalmente designar algunas o todas esas secciones como invariantes. Para hacerlo, añada sus títulos a la lista de Secciones Invariantes en la nota de licencia de la Versión Modificada. Tales títulos deben ser distintos de cualquier otro título de sección.

Puede añadir una sección titulada Aprobaciones, siempre que contenga únicamente aprobaciones de su Versión Modificada por otras fuentes --por ejemplo, observaciones de peritos o que el texto ha sido aprobado por una organización como la definición oficial de un estándar.

Puede añadir un pasaje de hasta cinco palabras como Texto de Cubierta Delantera y un pasaje de hasta 25 palabras como Texto de Cubierta Trasera en la Versión Modificada. Una entidad solo puede añadir (o hacer que se añada) un pasaje al Texto de Cubierta Delantera y uno al de Cubierta Trasera. Si el Documento ya incluye un textos de cubiertas añadidos previamente por usted o por la misma entidad que usted representa, usted no puede añadir otro; pero puede reemplazar el anterior, con permiso explícito del editor que agregó el texto anterior.

Con esta Licencia ni los autores ni los editores del Documento dan permiso para usar sus nombres para publicidad ni para asegurar o implicar aprobación de cualquier Versión Modificada.

5. COMBINACIÓN DE DOCUMENTOS

Usted puede combinar el Documento con otros documentos liberados bajo esta Licencia, bajo los términos definidos en la sección 4 anterior para versiones modificadas, siempre que incluya en la combinación todas las Secciones Invariantes de todos los documentos originales, sin modificar, listadas todas como Secciones Invariantes del trabajo combinado en su nota de licencia. Así mismo debe incluir la Limitación de Garantía.

El trabajo combinado necesita contener solamente una copia de esta Licencia, y puede reemplazar varias Secciones Invariantes idénticas por una sola copia. Si hay varias Secciones Invariantes con el mismo nombre pero con contenidos diferentes, haga el título de cada una de estas secciones único añadiéndole al final del mismo, entre paréntesis, el nombre del autor o editor original de esa sección, si es conocido, o si no, un número único. Haga el mismo ajuste a los títulos de sección en la lista de Secciones Invariantes de la nota de licencia del trabajo combinado.

En la combinación, debe combinar cualquier sección Titulada Historia de los documentos originales, formando una sección Titulada Historia; de la misma forma combine cualquier sección Titulada Agradecimientos, y cualquier sección Titulada Dedicatorias. Debe borrar todas las secciones tituladas Aprobaciones.

6. COLECCIONES DE DOCUMENTOS

Puede hacer una colección que conste del Documento y de otros documentos liberados bajo esta Licencia, y reemplazar las copias individuales de esta Licencia en todos los documentos por una sola copia que esté incluida en la colección, siempre que siga las reglas de esta Licencia para cada copia literal de cada uno de los documentos en cualquiera de los demás aspectos.

Puede extraer un solo documento de una de tales colecciones y distribuirlo individualmente bajo esta Licencia, siempre que inserte una copia de esta Licencia en el documento extraído, y siga esta Licencia en todos los demás aspectos relativos a la copia literal de dicho documento.

7. AGREGACIÓN CON TRABAJOS INDEPENDIENTES

Una recopilación que conste del Documento o sus derivados y de otros documentos o trabajos separados e independientes, en cualquier soporte de almacenamiento o distribución, se denomina un agregado si el copyright resultante de la compilación no se usa para limitar los derechos de los usuarios de la misma más allá de lo que los de los trabajos individuales permiten. Cuando el Documento se incluye en un agregado, esta Licencia no se aplica a otros trabajos del agregado que no sean en sí mismos derivados del Documento.

Si el requisito de la sección 3 sobre el Texto de Cubierta es aplicable a estas copias del Documento y el Documento es menor que la mitad del agregado entero, los Textos de Cubierta del Documento pueden colocarse en cubiertas que enmarquen solamente el Documento dentro del agregado, o el equivalente electrónico de las cubiertas si el documento está en forma electrónica. En caso contrario deben aparecer en cubiertas impresas enmarcando todo el agregado.

8. TRADUCCIÓN

La Traducción es considerada como un tipo de modificación, por lo que usted puede distribuir traducciones del Documento bajo los términos de la sección 4. El reemplazo las Secciones Invariantes con traducciones requiere permiso especial de los dueños de derecho de autor, pero usted puede añadir traducciones de algunas o todas las Secciones Invariantes a las versiones originales de las mismas. Puede incluir una traducción de esta Licencia, de todas las notas de licencia del documento, así como de las Limitaciones de Garantía, siempre que incluya también la versión en Inglés de esta Licencia y las versiones originales de las notas de licencia y Limitaciones de Garantía. En caso de desacuerdo entre la traducción y la versión original en Inglés de esta Licencia, la nota de licencia o la limitación de garantía, la versión original en Inglés prevalecerá.

Si una sección del Documento está Titulada Agradecimientos, Dedicatorias o Historia el requisito (sección 4) de Conservar su Título (Sección 1) requerirá, típicamente, cambiar su título.

9. TERMINACIÓN

Usted no puede copiar, modificar, sublicenciar o distribuir el Documento salvo por lo permitido expresamente bajo esta Licencia. Cualquier intento en otra manera de copia, modificación, sublicenciamiento, o distribución de él es nulo, y dará por terminados automáticamente sus derechos bajo esa Licencia.

Sin embargo, si usted cesa toda violación a esta Licencia, entonces su licencia proveniente de un titular de copyright queda restaurada (a) provisionalmente, a menos y hasta que el titular del copyright explícita y finalmente termine su licencia, y (b) permanentemente, si el titular del copyright falla en notificarle de la violación por algún medio razonable en un tiempo menor a 60 días después del cese.

Además, su licencia proveniente de un titular del copyright particular queda restaurada permanentemente si el titular del copyright le notifica de la violación por algún método razonable, es la primera vez que usted ha recibido aviso de la violación de esta Licencia (para cualquier trabajo) de ese titular del copyright, y usted remedia la violación en un tiempo menor a 30 días después de recibir dicho aviso.

La terminación de sus derechos bajo ésta sección no termina la licencia de terceros que hayan recibido copias o derechos de usted bajo ésta Licencia. Si sus derechos han sido terminados y no restaurados permanentemente, recibir una copia de alguna parte o el total del mismo material no le da ningún derecho de usarlo.



10. REVISIONES FUTURAS DE ESTA LICENCIA

De vez en cuando la Free Software Foundation puede publicar versiones nuevas y revisadas de la Licencia de Documentación Libre GNU. Tales versiones nuevas serán similares en espíritu a la presente versión, pero pueden diferir en detalles para solucionar nuevos problemas o intereses. Vea http://www.gnu.org/copyleft/.

Cada versión de la Licencia tiene un número de versión que la distingue. Si el Documento especifica que se aplica una versión numerada en particular de esta licencia o cualquier versión posterior, usted tiene la opción de seguir los términos y condiciones de la versión especificada o cualquiera posterior que haya sido publicada (no como borrador) por la Free Software Foundation. Si el Documento no especifica un número de versión de esta Licencia, puede escoger cualquier versión que haya sido publicada (no como borrador) por la Free Software Foundation. Si el Documento especifica que un apoderado puede decidir qué versión futura de esta Licencia puede ser utilizada, esa frase de aceptación del apoderado de una versión le autoriza permanentemente a escoger esa versión para el Documento.

11. Re-Licenciamiento

Un Sitio de Colaboración Masiva Multiautor (o Sitio CMM) significa cualquier servidor World Wide Web que publique trabajos que puedan ser sujetos a copyright y que también provea medios prominentes para que cualquiera pueda editar esos trabajos. Una Wiki pública que cualquiera puede editar es un ejemplo de tal servidor. Una Colaboración Masiva Multiautor (o CMM) contenida en el sitio significa cualquier colección de trabajos que puedan ser sujetos a copyright publicados en el sitio de CMM.

CC-BY-SA significa la licencia Creative Commons Attribution-Share Alike 3.0 \\
(Reconocimiento-Compartir bajo la misma licencia 3.0 de Creative Commons) publicada por Creative Commons Corporation, una corporación sin fines de lucro con base en San Francisco, California, así como versiones futuras copyleft de esa licencia publicada por esa misma organización.

Incorporar significa publicar o re-publicar un Documento, como un todo o parcialmente, como parte de otro Documento.

Un sitio CMM es elegible para re-licenciamiento si es licenciado bajo esta Licencia, y si todos los trabajos que fueron publicados originalmente bajo esta Licencia en algún otro lugar diferente a esta CMM, y subsecuentemente incorporado como un todo o parcialmente a la CMM, (1)no tenía textos de cubierta o secciones invariantes, y (2) fueron incorporados previo a Noviembre 1, 2008.

El operador de un Sitio CMM puede volver a publicar una CMM contenida en el sitio bajo CC-BY-SA en el mismo sitio en cualquier momento antes de Agosto 1, 2009, siempre que la CMM sea elegible para re-licenciamiento.\\


Finalmente, en lo que respecta a la herramienta de estudio a elaborar, es necesario establecer un acuerdo entre los maratonistas que la vayan  a usar, de modo que estén de acuerdo en la publicación del código fuente de su autoría.

\subsection{MARCO CONCEPTUAL}

	\begin{itemize}

	\item Maratón de Programación: Una maratón de programación es un evento competitivo en el que diferentes equipos se enfrentar a solucionar problemas durante el menor tiempo posible, para solucionar tales ejercicios se ponen en práctica de una manera integral las habilidades y conocimientos de un ingeniero, de modo que se logré programar el algoritmo adecuado.\\
Entre los diferentes propósitos de este tipo de actividades está el motivar y propiciar el trabajo en grupo, aplicar conocimientos de ingeniería e integrar la comunidad académica interesada en el desarrollo de software.

	\item Casos de Prueba: Están conformados por archivos de entrada y salida, los de entrada corresponden a un conjunto de argumentos frente a los cuales es evaluado cada uno de los algoritmos que un maratonista propone como solución a un determinado problema, y según los cuales debe retornar los valores especificados en el archivo de salida.

	\item ACM: la \emph{Association for Computer Machinery} (ACM) es una organización a nivel mundial que reúne a todos los profesionales, estudiantes, investigadores y a cada persona interesada en ciencias de la computación. Actualmente la ACM cuenta con más de 92000 miembros a nivel mundial y es reconocida como la asociación número uno para los profesionales en computación.\newline
Esta organización facilita varios recursos para toda su comunidad con el fin de que la computación crezca como ciencia y como profesión, entre ellos la biblioteca digital más importante del campo de la computación, las publicaciones, cursos y libros \emph{online}, conferencias, artículos científicos, noticias acerca de la computación, bolsa de empleo, blogs de discusión ACM, revistas científicas, entre otros\footnote{Aplicación en línea [base de datos],$<$http://dl.acm.org/$>$}.

	\item ICPC: \emph{El International Collegiate Programming Contest} (ICPC) promueve maratones de programación bajo los auspicios de la ACM y tiene sede en la universidad de Baylor, estas maratones son conocidas como competencias ACM ICPC, gozan de un gran prestigio y tradicionalidad en el mundo de la programación, con ellas se fomenta la creatividad, el trabajo en equipo y la innovación en la creación de nuevos programas de software, se crea un ambiente de trabajo bajo presión en el que los estudiantes pueden poner a prueba todos sus conocimientos y capacidad de respuesta. \\
En las maratones de programación ACM ICPC participan decenas de miles de los mejores estudiantes y profesores en las disciplinas informáticas en casi 2.000 universidades de más de 80 países en seis continentes, estos se agrupan en una red global de universidades que participan en competencias regionales para clasificar a las Finales ACM-ICPC \emph{ World}.

	\item Circuito Colombiano de Maratones de Programación REDIS/ACIS: La Red de Decanos y Directores de Ingeniería de Sistemas y Afines (REDIS), en conjunto con la Asociación Colombiana de Ingenieros de Sistemas (ACIS), organizan anualmente una serie de maratones de programación a nivel nacional, con las que se brinda un espacio de sana competencia entre equipos de diferentes universidades del país, espacio en el cual miden su desempeño frente a problemas tipo maratón ACM ICPC.

	\item Maratón Nacional de Programación: La maratón nacional de programación es un evento que sirve como mecanismo para clasificar a la Maratón Regional Latinoamericana ACM ICPC, es organizada por ACIS y REDIS. Se realiza cada año y de manera simultánea en diferentes sedes del país que han sido seleccionadas previamente.

	\item Maratón Regional Latinoamericana ACM ICPC\footnote{ICPC Regional Rules [en línea], $<$http://www.acis.org.co/index.php?id=1677$>$}: Es una competencia internacional de programación, regional suramericana del ACM International Collegiate Programming Contest, se realiza en diferentes sedes de Suramérica (Argentina, Bolivia, Brasil, Chile, Colombia, Cuba, México, Perú y Venezuela), en este evento son seleccionados los equipos que participarán en la Maratón Mundial ACM ICPC.

	\item Maratón Mundial ACM ICPC\footnote{World Finals Rules, [en línea], $<$http://cm.baylor.edu/welcome.icpc$>$}: Es el máximo nivel en las maratones organizadas por ACM ICPC, en estas participan los mejores equipos del mundo, y cada año se selecciona un lugar diferente del mundo como sede para el desarrollo del evento. \\
Los algoritmos sólo pueden ser implementados en lenguajes como C, C++ ó Java.

	\end{itemize}

\chapter{METODOLOGÍA DE LA INVESTIGACIÓN}

\section{DISEÑO METODOLÓGICO}

\subsection{FORMULACIÓN DE LA HIPÓTESIS}

Una herramienta computacional que permita realizar postmaratones contribuye a la retroa-\hspace{0.5cm}limentación entre los maratonistas que participan en las maratones de programación llevadas a cabo en el Programa de Ingeniería de Sistemas y Computación de la Universidad Tecnológica de Pereira.

\subsection {TIPO DE INVESTIGACIÓN}

La presente investigación tiene un enfoque cuantitativo.

\subsection{POBLACIÓN}

La población es el conjunto de estudiantes pertenecientes al Programa de Ingeniería de Sistemas y Computación
de la Universidad Tecnológica de Pereira que participan en las maratones de programación.

\subsection{DISEÑO DE INSTRUMENTOS PARA TOMA DE INFORMACIÓN}

Encuestas dirigidas a los estudiantes pertenecientes al programa de Ingeniería de Sistemas y Computación de la Universidad Tecnológica de Pereira que participan en las maratones de programación.
Se han diseñado dos formatos de encuesta, \textbf{Encuesta 1} y \textbf{Encuesta 2}, las cuales se aplicarán durante dos fases, en la \textbf{fase 1}  sin la existencia de la herramienta de estudio y en la \textbf{fase 2} cuando está ya esté implantada.

La  \textbf{Encuesta 1}, que permite medir los ítems establecidos en la tabla \ref{tb:opervar2} se aplicará en ambas fases, mientras que la \textbf{Encuesta 2} que permite validar el proyecto, sólo se aplicará en la fase2.

Los formatos de las encuestas son:
\vspace{0.4 cm}

\textbf{ENCUESTA 1:}\label{encuesta1}
	\begin{enumerate}
	\item ¿En cuántas competencias del Circuito Colombiano de Maratones de Programación (de ahora en adelante: CCMP REDIS/ACIS) ha participado?

    	\begin{enumerate}
        \item Ninguna
        \item Entre 1 y 4
        \item Entre 5 y 8
        \item Entre 9 y 12
        \item Entre 13 y 16
        \item Más de 16
    	\end{enumerate}
    
	\item ¿Ha utilizado alguna vez un juez en línea (\emph{online judge})?

   	 \begin{enumerate}
        \item No se que es
        \item Nunca 
        \item Si
   	 \end{enumerate}

	\item ¿Ha descargado material de apoyo para las maratones de programación, tales cómo casos de prueba, enunciado y/o soluciones de problemas?

    	\begin{enumerate}
        \item No los conozco
        \item Nunca 
        \item Si
    	\end{enumerate}
    
	\item ¿Después de una competencia de programación qué hace con los ejercicios que no logró resolver correctamente?

   	 \begin{enumerate}
        \item Los resuelve y somete en un juez en línea
        \item Los resuelve y \textbf{no} los somete en un juez en línea
        \item Busca la solución en internet
        \item No los vuelve a mirar
    	\end{enumerate}
        
	\item  ¿Después de una competencia de programación qué hace con los ejercicios que no alcanzó a trabajar?

   	 \begin{enumerate}
        \item Trata de resolverlos
        \item Los resuelve y somete en un juez en línea
        \item Los resuelve y \textbf{no} los somete en un juez en línea
        \item Busca la solución en internet
        \item No los vuelve a mirar
   	 \end{enumerate}

	\item  ¿Considera que actualmente en la Universidad Tecnológica de Pereira existe retroa-\hspace{0.5cm}limentación después de las competencias del CCMP?
	
    	\begin{enumerate}
        \item No
        \item Si
   	 \end{enumerate}
    
Si su anterior respuesta fue afirmativa, responda las siguientes preguntas, de lo contrario ha finalizado la encuesta.
   
	\item  ¿Qué tan adecuada considera que es la retroalimentación después de las competencias del CCMP?

   	 \begin{enumerate}
        \item Mala
        \item Aceptable
        \item Buena
        \item Excelente
    	\end{enumerate}
    
	\item  ¿Qué tanto participa en el proceso de retroalimentación después de las competencias del CCMP?

    	\begin{enumerate}
        \item Nada
        \item Poco 
        \item Mucho
   	 \end{enumerate}
    
	\end{enumerate}
\vspace{1.0 cm}
 	
\textbf{ENCUESTA 2:} \label{encuesta2}
	\begin{enumerate}

	\item  ¿Qué tanto considera usted que le aporta la actual herramienta postmaratón al proceso de retroalimentación después de las competencias del CCMP?
    
   	 \begin{enumerate}
        \item Nada
        \item Poco
        \item Mucho
    	\end{enumerate}

	\item  ¿Cómo calificaría usted el espacio de retroalimentación que le brinda la herramienta de estudio postmaratón?

   	 \begin{enumerate}
        \item Malo
        \item Aceptable
        \item Bueno
        \item Excelente
   	 \end{enumerate}

	\item  ¿Qué tanto participa usted con la actual herramienta postmaratón?

        \begin{enumerate}
        \item Nada
        \item Poco 
        \item Mucho
    	\end{enumerate}
    
	\item  ¿Considera usted que la actual herramienta postmaratón le brinda el espacio necesario para socializar la solución de los problemas de maratón con sus compañeros?

        \begin{enumerate}
        \item No
        \item Si
    	\end{enumerate}
    
	\item  ¿Qué le mejoraría a la actual herramienta postmaratón?
	\end{enumerate}	
\vspace{1.0 cm}


\subsection{OPERACIONALIZACIÓN DE VARIABLES}

En la tabla \ref{tb:opervar2} se especifican las variables identificadas para comprobar la hipótesis.

	\begin{table}[p!]
	\caption{Operacionalización de variables}
	\label{tb:opervar2}
	\begin{center}
	\resizebox{15cm}{!} {
	\begin{tabular}{|p{3cm}|p{5cm}|c|p{4cm}|p{10cm}|}
	\hline
Variable & Definición Operacional & Categorías & Indicadores & Items\\
	\hline
EXPERIENCIA MARATONISTA & Grado de experiencia del maratonista con maratones de programación, aplicaciones y material de apoyo que contribuyan a la retroalimentación de las mismas. & Maratonistas &  \multirow{2}{*}{}{ Nivel de experiencia en maratones de programación} & 
¿En cuántas competencias del Circuito Colombiano de Maratones de Programación  (de ahora en adelante: CAMA) ha participado?
    \begin{enumerate}
        \item Ninguna
        \item Entre 1 y 4
        \item Entre 5 y 8
        \item Entre 9 y 12
        \item Entre 13 y 16
        \item Más de 16
    \end{enumerate}\\

& & Maratonistas & Nivel de experiencia con jueces online &
¿Ha utilizado alguna vez un juez en línea (\emph{online judge})?
    \begin{enumerate}
        \item No se que es
        \item Nunca 
        \item Si
    \end{enumerate}\\
& & Maratonistas & Nivel de conocimiento de material de apoyo para resolver maratones de programación &
¿Ha descargado material de apoyo para las maratones de programación, tales cómo casos de prueba, enunciado y/o soluciones de problemas?
    \begin{enumerate}
        \item No los conozco
        \item Nunca 
        \item Si
    \end{enumerate}\\
\hline
ACTIVIDAD POSTMARATÓN & Grado de actividad postmaratón e indicios de búsqueda de retroalimentación. & Maratonistas &  \multirow{2}{*}{}{ Nivel de actividad postmaratón} &
¿Después de una competencia de programación qué hace con los ejercicios que no logró resolver correctamente?
    \begin{enumerate}
        \item Los resuelve y somete en un juez en línea
        \item Los resuelve y \textbf{no} los somete en un juez en línea
        \item Busca la solución en internet
        \item No los vuelve a mirar
    \end{enumerate}  
¿Después de una competencia de programación qué hace con los ejercicios que no alcanzó a trabajar?
    \begin{enumerate}
        \item Trata de resolverlos
        \item Los resuelve y somete en un juez en línea
        \item Los resuelve y \textbf{no} los somete en un juez en línea
        \item Busca la solución en internet
        \item No los vuelve a mirar
    \end{enumerate}\\
\hline
ESTADO RETROALIMENTACIÓN & Grado de retroalimentación y cálidad de la misma. & Maratonistas &  \multirow{2}{*}{}{ Nivel de retroalimentación} &
¿Considera que actualmente en la Universidad Tecnológica de Pereira existe retroalimentación después de las competencias del CCMP?
    \begin{enumerate}
        \item No
        \item Si
    \end{enumerate}
    
Si su anterior respuesta fue afirmativa, responda las siguientes preguntas, de lo contrario ha finalizado la encuesta.\\
& & Maratonistas & Cálidad de la retroalimentación &
¿Qué tan adecuada considera que es la retroalimentación después de las competencias del CCMP?
    \begin{enumerate}
        \item Mala
        \item Aceptable
        \item Buena
        \item Excelente
    \end{enumerate}

¿Qué tanto participa en el proceso de retroalimentación después de las competencias del CCMP?
    \begin{enumerate}
        \item Nada
        \item Poco 
        \item Mucho
    \end{enumerate}\\
	\hline
	%%
	\end{tabular}
	}
	\end{center}	
	\end{table}


\section{GRADO DE RETROALIMENTACIÓN}
Teniendo como premisa la no existencia de una herramienta de estudio para las maratones de programación promovidas en el programa, en la primera fase del proyecto se miden los ítems definidos en \ref{tb:opervar2}, tales mediciones permiten evaluar el estado de retroalimentación de los maratonistas pertenecientes al programa de Ingeniería de Sistemas y Computación de la Universidad Tecnológica de Pereira.\\

\subsection{APLICACIÓN DE ENCUESTAS FASE 1} \label{encu_fase1}
Se aplica el formato de encuesta definido en \ref{encuesta1}, a 26 maratonistas del programa de Ingeniería de Sistemas y computación de la Universidad Tecnológica de Pereira, dentro de la población encuestada se deben distinguir dos clases de maratonistas:

	\begin{itemize}

	\item \textbf{Maratonistas Novatos}: son maratonistas que solamente han participado en competencias no oficiales del CCMP, es decir, maratones de entrenamiento o internas, organizadas por el semillero de investigación In-Sílico.

	\item \textbf{Maratonistas con Experiencia}: son maratonistas que han participado en ambos tipos de competencias, o en las oficiales del CCMP.

Ambas clases son fundamentales para la continuidad del proceso en maratones, por consiguiente, actividades de entrenamiento o retroalimentación referentes a competencias del CCMP no excluyen  a maratonistas novatos.\\

En la tabla \ref{tb:encuesta1} se ilustra el porcentaje de respuesta para cada uno de sus ítems.\\

\begin{table}[p!]
	\caption{Aplicación de Encuesta 1}
	\label{tb:encuesta1}
	\begin{center}
	\resizebox{14.5cm}{!} {
	\begin{tabular}{|m{4cm}|p{5cm}|p{6cm}|p{1.7cm}|}
	\hline
	Variable & Indicadores & Ítems & \multicolumn{1}{|>{\columncolor[gray]{0.8}} c|}{Respuestas}\\

	\hline
	EXPERIENCIA MARATONISTA & \textbf{Nivel de experiencia en maratones de programación} & 
	\multicolumn{2}{p{10cm}|}{\textbf{1.} ¿En cuántas competencias del Circuito Colombiano de Maratones de Programación (de ahora en adelante: CCMP) ha participado?}\\
	& & \multicolumn{2}{p{7.7cm}|}{}\\

	\cline{3-4}
&  & \cellcolor[gray]{0.8}\textbf{a.} Ninguna & \multicolumn{1}{|>{\columncolor[gray]{0.8}} c|}{53,85\%}\\
&  & \cellcolor[gray]{0.9}\textbf{b.} Entre 1 y 4 & \multicolumn{1}{|>{\columncolor[gray]{0.9}} c|}{15,38\%}\\
&  & \cellcolor[gray]{0.8}\textbf{c.} Entre 5 y 8 & \multicolumn{1}{|>{\columncolor[gray]{0.8}} c|}{7,69\%} \\
&  & \cellcolor[gray]{0.9}\textbf{d.} Entre 9 y 12 & \multicolumn{1}{|>{\columncolor[gray]{0.9}} c|}{7,69\%} \\
&  & \cellcolor[gray]{0.8}\textbf{e.} Entre 13 y 16 & \multicolumn{1}{|>{\columncolor[gray]{0.8}} c|}{15,38\%} \\
&  & \cellcolor[gray]{0.9}\textbf{f.} Mas de 16 & \multicolumn{1}{|>{\columncolor[gray]{0.9}} c|}{0\%} \\

	\cline{2-4}
&  \textbf{Nivel de experiencia con jueces online} & \multicolumn{2}{p{10cm}|}{\textbf{2.} ¿Ha utilizado alguna vez un juez en línea (\emph{online judge})?}\\

	\cline{3-4}
&  & \cellcolor[gray]{0.8}\textbf{a.} No se que es & \multicolumn{1}{|>{\columncolor[gray]{0.8}} c|}{0\%}\\
&  & \cellcolor[gray]{0.9}\textbf{b.} Nunca & \multicolumn{1}{|>{\columncolor[gray]{0.9}} c|}{23,08\%}\\
&  & \cellcolor[gray]{0.8}\textbf{c.} Si & \multicolumn{1}{|>{\columncolor[gray]{0.8}} c|}{76,92\%} \\

	\cline{2-4}
&  \textbf{Nivel de conocimiento de material de apoyo para resolver maratones de programación} & \multicolumn{2}{p{10cm}|}{\textbf{3.} ¿Ha descargado material de apoyo para las maratones de programación, tales cómo casos de prueba, enunciado y/o soluciones de problemas?}\\
	& & \multicolumn{2}{p{7.7cm}|}{}\\
	
	\cline{3-4}
	&  & \cellcolor[gray]{0.8}\textbf{a.} No los conozco & \multicolumn{1}{|>{\columncolor[gray] {0.8}} c|}{0\%}\\
&  & \cellcolor[gray]{0.9}\textbf{b.} Nunca & \multicolumn{1}{|>{\columncolor[gray]{0.9}} c|}{19,23\%}\\
&  & \cellcolor[gray]{0.8}\textbf{c.} Si & \multicolumn{1}{|>{\columncolor[gray]{0.8}} c|}{80,77\%} \\

	\hline
	ACTIVIDAD POSTMARATÓN &  \textbf{Nivel de actividad postmaratón.} & 
	\multicolumn{2}{p{10cm}|}{\textbf{4.} ¿Después de una competencia de programación qué hace con los ejercicios que no logró resolver correctamente?} \\

	\cline{3-4}
&  & \cellcolor[gray]{0.8}\textbf{a.} Los resuelve y somete en un juez en línea & \multicolumn{1}{|>{\columncolor[gray]{0.8}} c|}{30,77\%}\\
&  & \cellcolor[gray]{0.9}\textbf{b.}  Los resuelve y \textbf{no} los somete en un juez en línea & \multicolumn{1}{|>{\columncolor[gray]{0.9}} c|}{34,61\%}\\
&  & \cellcolor[gray]{0.8}\textbf{c.} Busca la solución en internet & \multicolumn{1}{|>{\columncolor[gray]{0.8}} c|}{3,85\%} \\
&  & \cellcolor[gray]{0.9}\textbf{d.} No los vuelve a mirar & \multicolumn{1}{|>{\columncolor[gray]{0.9}} c|}{30,77\%}\\

	\cline{3-4}
	
	& & \multicolumn{2}{p{10cm}|}{\textbf{5.} ¿Después de una competencia de programación qué hace con los ejercicios que no alcanzó a trabajar?} \\
	& & \multicolumn{2}{p{7.7cm}|}{}\\

&  & \cellcolor[gray]{0.8}\textbf{a.} Trata de resolverlos & \multicolumn{1}{|>{\columncolor[gray]{0.8}} c|}{57,69\%}\\
&  & \cellcolor[gray]{0.9}\textbf{b.}  Los resuelve y somete en un juez en línea & \multicolumn{1}{|>{\columncolor[gray]{0.9}} c|}{11,54\%}\\
&  & \cellcolor[gray]{0.8}\textbf{c.} Los resuelve y \textbf{no} los somete en un juez en línea & \multicolumn{1}{|>{\columncolor[gray]{0.8}} c|}{7,69\%} \\
&  & \cellcolor[gray]{0.9}\textbf{d.} Busca la solución en internet & \multicolumn{1}{|>{\columncolor[gray]{0.9}} c|}{3,85\%}\\
&  & \cellcolor[gray]{0.8}\textbf{e.} No los vuelve a mirar & \multicolumn{1}{|>{\columncolor[gray]{0.8}} c|}{19,23\%}\\
	
	\hline
	
	ESTADO RETROALIMENTACIÓN & \textbf{Nivel de retroalimentación} & 
	\multicolumn{2}{p{10cm}|}{\textbf{6.} {¿Considera que actualmente en la Universidad Tecnológica de Pereira existe retroalimentación después de las competencias del CCMP?}}\\
	& & \multicolumn{2}{p{7.7cm}|}{}\\

	\cline{3-4}
&  & \cellcolor[gray]{0.8}\textbf{a.} No & \multicolumn{1}{|>{\columncolor[gray]{0.8}} c|}{30,77\%}\\
&  & \cellcolor[gray]{0.9}\textbf{b.} Si & \multicolumn{1}{|>{\columncolor[gray]{0.9}} c|}{69,23\%}\\

	\cline{2-4}
&  \textbf{Cálidad de la retroalimentación} & \multicolumn{2}{p{10cm}|}{\textbf{7.} ¿Qué tan adecuada considera que es la retroalimentación después de las competencias del CCMP?}\\
	& & \multicolumn{2}{p{7.7cm}|}{}\\

	\cline{3-4}
&  & \cellcolor[gray]{0.8}\textbf{a.} Mala & \multicolumn{1}{|>{\columncolor[gray]{0.8}} c|}{0\%}\\
&  & \cellcolor[gray]{0.9}\textbf{b.} Aceptable & \multicolumn{1}{|>{\columncolor[gray]{0.9}} c|}{38,46\%}\\
&  & \cellcolor[gray]{0.8}\textbf{c.} Buena & \multicolumn{1}{|>{\columncolor[gray]{0.8}} c|}{23,07\%} \\
&  & \cellcolor[gray]{0.9}\textbf{d.} Excelente & \multicolumn{1}{|>{\columncolor[gray]{0.9}} c|}{7,69\%} \\
&  & \cellcolor[gray]{0.8}\textbf{No aplica.} Entre 13 y 16 & \multicolumn{1}{|>{\columncolor[gray]{0.8}} c|}{30,77\%} \\

	\cline{3-4}
&  & \multicolumn{2}{p{10cm}|}{\textbf{8.} ¿Qué tanto participa en el proceso de retroalimentación después de las competencias del CCMP?}\\
	& & \multicolumn{2}{p{7.7cm}|}{}\\

	\cline{3-4}
&  & \cellcolor[gray]{0.8}\textbf{a.} Nada & \multicolumn{1}{|>{\columncolor[gray]{0.8}} c|}{15,38\%}\\
&  & \cellcolor[gray]{0.9}\textbf{b.} Poco & \multicolumn{1}{|>{\columncolor[gray]{0.9}} c|}{42,31\%}\\
&  & \cellcolor[gray]{0.8}\textbf{c.} Mucho & \multicolumn{1}{|>{\columncolor[gray]{0.8}} c|}{11,54\%} \\
&  & \cellcolor[gray]{0.9}\textbf{No aplica.} & \multicolumn{1}{|>{\columncolor[gray]{0.9}} c|}{30,77\%} \\
	\hline
	\end{tabular}
	}
	\end{center}	
	\end{table}
\clearpage
\subsubsection{ANÁLISIS DE LOS DATOS DE LA ENCUESTA 1}


Variable \textbf{Experiencia Maratonista}.
	
	\begin{itemize}

	\item \textbf{Indicador}: Nivel de experiencia en maratones de programación.\\

	\textbf{Ítem 1}: ¿En cuántas competencias del Circuito Colombiano de Maratones de Programación (de ahora en adelante: CCMP) ha participado?

	\begin{figure}[H]	
	\caption{Experiencia Maratonista}
	\label{fig:expe_marara1}
	\begin{center}
	\fbox{\includegraphics[width=11cm]{imagenes/encuesta/var1_ind1.png}}
	\end{center}		
	\end{figure}

	Como ilustra el diagrama de barras, de la población encuestada el \textbf{53,85\%} corresponde a \textbf{maratonistas novatos}, mientras que el resto de la proporción se distribuye en niveles \textbf{Bajo}, \textbf{Medio} y \textbf{Alto} de \textbf{experiencia en el CCMP}.\\

	Nivel \textbf{Bajo} se integra por la categoría: \textbf{Entre 1 y 4}; nivel \textbf{Medio} por: \textbf{Entre 5 y 8} y por \textbf{Entre 9 y 12}; nivel \textbf{Alto} por las categorías \textbf{Entre 13 y 16} y \textbf{Más de 16}.\\

	Así, el \textbf{15,38\%} corresponde a nivel \textbf{Bajo}, el \textbf{15,38\%} a nivel \textbf{Medio} y el \textbf{15,38\%} restante a nivel \textbf{Alto}.\\

	El análisis muestra que si bien, \textbf{46,15\%} de la población se ha vinculado a maratones del CCMP, existe una importante fuente de talento a vincular, representada por el \textbf{53,85\%}.\\

	\clearpage

	\item \textbf{Indicador}: Nivel de experiencia con jueces online.\\

	\textbf{Ítem 2}: ¿Ha utilizado alguna vez un juez en línea (\emph{online judge})?	

	\begin{figure}[H]	
	\caption{Experiencia Maratonista}
	\label{fig:expe_marara2}
	\begin{center}
	\fbox{\includegraphics[width=7cm]{imagenes/encuesta/var1_ind2.png}}
	\end{center}	
	\end{figure}

Tal como lo ilustra la anterior figura \ref{fig:expe_marara2}, el total de entrevistados saben qué es un juez en línea, sin embargo el \textbf{23,08\%} carece de experiencia en su utilización.\\\\
	
	\item \textbf{Indicador}: Nivel de conocimiento de material de apoyo para resolver maratones de programación.\\

	\textbf{Ítem 3}: ¿Ha descargado material de apoyo para las maratones de programación, tales cómo casos de prueba, enunciado y/o soluciones de problemas?\\
	
	La gráfica \ref{fig:expe_mara3} indica  que si bien, la mayoría de la población conoce material de apoyo para resolver maratones de programación, existe un \textbf{19,23\%} que no la posee.\\

	Los datos analizados de \textbf{ítem 2} e \textbf{ítem 3}, pertenecientes al presente indicador, reflejan un bajo porcentaje de maratonistas sin experiencia en la utilización de material de apoyo para maratones de programación, aún así, resultaría bastante positivo para el proceso de formación de los maratonistas, tratar de reducir tales proporciones a lo mínimo posible.\\

	En síntesis, los indicadores de la variable Experiencia Maratonista, muestran un importante porcentaje de maratonistas tanto novatos como experimentados, ambos con una necesidad en común: compartir conocimiento.\\

	\begin{figure}[H]	
	\caption{Experiencia Maratonista}
	\label{fig:expe_mara3}
	\begin{center}
	\fbox{\includegraphics[width=7cm]{imagenes/encuesta/var1_ind3.png}}
	\end{center}		
	\end{figure}

	\end{itemize}

	\vspace{1.0cm}

Variable \textbf{ACTIVIDAD POSTMARATÓN}.
	
	\begin{itemize}
	\item \textbf{Indicador}: Nivel de actividad postmaratón.\\

\textbf{Ítem 4}: ¿Después de una competencia de programación qué hace con los ejercicios que no logró resolver correctamente?

	\begin{figure}[H]	
	\caption{Actividad Postmaratón}
	\label{fig:act_post1}
	\begin{center}
	\fbox{\includegraphics[width=9cm]{imagenes/encuesta/var2_ind1.png}}
	\end{center}		
	\end{figure}

La gráfica \ref{fig:act_post1} evidencia que gran parte de los maratonistas continúan trabajando en problemas no solucionados correctamente durante la competencia, sin embargo, \textbf{30,77\%} no lo hace.\\\\

\textbf{Ítem 5}: ¿Después de una competencia de programación qué hace con los ejercicios que no alcanzó a trabajar?

	\begin{figure}[H]	
	\caption{Actividad Postmaratón}
	\label{fig:act_post2}
	\begin{center}
	\fbox{\includegraphics[width=9cm]{imagenes/encuesta/var2_ind1_2.png}}
	\end{center}		
	\end{figure}

	Existe una intención de trabajo postmaratón representada por  el \textbf{57,69\%}, cuando se trata de problemas que el maratonista no alcanzó a solucionar en competencia, sin embargo, sólo el \textbf{11,54\%} los resuelve y somete en un juez en línea. Ver gráfica \ref{fig:act_post2}\\

	Para la variable Actividad Postmaratón, los ítems muestran que más de la mitad de encuestados realiza trabajo posterior a las competencias, sin embargo, hace falta más continuidad en este.\\

	\end{itemize}

	\vspace{0.5cm}

Variable \textbf{ESTADO DE RETROALIMENTACIÓN}.
	
	\begin{itemize}
	
	\item\textbf{Indicador}: Nivel de retroalimentación.\\

\textbf{Ítem 6}: ¿Considera que actualmente en la Universidad Tecnológica de Pereira existe retroalimentación después de las competencias del CCMP?\\

	\begin{figure}[H]	
	\caption{Estado de Retroalimentación}
	\label{fig:esta_retro1}
	\begin{center}
	\fbox{\includegraphics[width=6cm]{imagenes/encuesta/var3_ind1.png}}
	\end{center}		
	\end{figure}
	
	El \textbf{69,23\%} de la población considera que existe retroalimentación, por otra parte el \textbf{30,77\%} no lo considera así.\\\\

	\item\textbf{Indicador}: Cálidad de la retroalimentación.\\

	\textbf{Ítem 7}: ¿Qué tan adecuada considera que es la retroalimentación después de las competencias del CCMP?\\

	\begin{figure}[H]	
	\caption{Estado de Retroalimentación}
	\label{fig:esta_retro2}
	\begin{center}
	\fbox{\includegraphics[width=7cm]{imagenes/encuesta/var3_ind2.png}}
	\end{center}		
	\end{figure}

	Como se aprecia en la gráfica \ref{fig:esta_retro2}, del \textbf{69,23\%} de maratonistas que considera que existe retroalimentación, el \textbf{34,62\%} la califica como aceptable, el \textbf{23,07\%} como Buena y el resto del porcentaje como Excelente.\\
		
	\vspace{0.5cm}

	\textbf{Ítem 8}:¿Qué tanto participa en el proceso de retroalimentación después de las competencias del CCMP?\\

	\begin{figure}[H]	
	\caption{Estado de Retroalimentación}
	\label{fig:esta_retro3}
	\begin{center}
	\fbox{\includegraphics[width=8cm]{imagenes/encuesta/var3_ind2_2.png}}
	\end{center}		
	\end{figure}

	Tal como lo ilustra la siguiente gráfica, del \textbf{69,23\%} de maratonistas que consideran la existencia de retroalimentación, el \textbf{42,31\%} participa poco, el \textbf{11,54\%} participa mucho y el \textbf{15,38\%} no participa.\\

	Finalmente, los indicadores de la variable Estado de Retroalimentación, evidencian que la población de maratonistas en su mayoría, percibe la existencia de retroalimentación, de estos, el mayor porcentaje (\textbf{34,62\%}) la consideran aceptable.

	\end{itemize}	

	


\chapter{REQUERIMIENTOS, ANÁLISIS, DISEÑO DE ADAPTACIÓN Y PRUEBAS DE LA HERRAMIENTA}

\section{REQUERIMIENTOS PARA LA HERRAMIENTA DE ESTUDIO}\label{requerimientos}

Los requerimientos de la herramienta se construyen mediante entrevistas al docente líder\footnote{Ingeniero Hugo Humberto Morales Peña, Docente líder Maratones de Programación, Ingeniería de Sistemas y Computación, Universidad Tecnológica de Pereira.} de las maratones de programación, a partir de las cuales se establece:

	\begin{enumerate}
		\item Habilita contests externos, los maratonistas participantes no son exclusivamente maratonistas UTP.
		\item Habilita contests internos, exclusivamente para maratonistas UTP.
		\item Habilita postmaratones por un periodo de tiempo t, durante el cual, publica código fuente sometido y juzgado como correcto; sólo permite la participación de maratonistas UTP.
		\item Permite habilitar y deshabilitar teams externos. 
		\item Permite subir y visualizar el enunciado de cada problema perteneciente a un contest, bien sea de tipo externo, interno o postmaratón. 
		\item Publica comentarios adicionados por el maratonista al código fuente existente, durante la actual postmaratón.
		\item Permite descargar el código fuente publicado, durante el transcurso de la postmaratón, sin importar si el maratonista que lo descarga es o no su autor. 
		\item Genera un histórico de las postmaratones realizadas, de modo que se visualice: el código fuente  disponible y sus respectivos comentarios.
		\item Permite someter soluciones a problemas de postmaratones pasadas, siempre y cuando, no exista una solución correcta por parte del maratonista para determinado problema.
		\item Publica comentarios adicionados  por el maratonista a problemas de postmaratones pasadas.
		\item Permite descargar código fuente existente para problemas de postmaratones finalizadas, sin restricciones de autoría.
	\end{enumerate}


\section{ANÁLISIS}

Una vez se tienen definidos los requerimientos para la herramienta de estudio, se procede a investigar herramientas computacionales de código abierto que funcionan como jueces de maratones de programación, con la finalidad de elegir una de ellas y adaptarla a las necesidades del proyecto.

\subsection{HERRAMIENTAS COMPUTACIONALES DE CÓDIGO \\ 
ABIERTO QUE FUNCIONAN COMO JUECES DE \\ 
MARATONES DE PROGRAMACIÓN} 

Entre los parámetros que debe cumplir el sistema de juzgamiento a ser adaptado, se encuentran:

	\begin{itemize}\label{criter}
	\item Código fuente  accesible y modificable, siendo posible extender las funcionalidades.
	\item Aplicativo tipo web, así los usuarios (maratonistas) no se limitan a una plataforma específica.
	\item Adopción de reglamento definido por ACM-ICPC para maratones de programación, por consiguiente, debe permitir sometimiento de algoritmos implementados en lenguajes como C, C++, Java y Pascal.
	\item Inclusión de aspectos de modularidad en su diseño, así las modificaciones se tornan sencillas y mantenibles.
	\end{itemize}	

Teniendo en cuenta tales criterios, se elabora la siguiente caracterización:

	\begin{table}[H]
	\caption{Sistemas de juzgamiento: injuslin; Celiz}
	\label{tb:injuslin}
	\begin{center}
	\begin{tabular}{|p{6.5cm}|p{6.5cm}|}
	\hline
	\multicolumn{2}{>{\columncolor[gray]{0.8}}c}{\textbf{injuslin(INformatics JUdge System for LINux)}} \\
	\hline
	\hline
	Lenguaje de implementación & C++\\
	\hline
	Licencia & GNU General Public License (GPL)\\
	\hline
	Obtener código fuente & \url{http://injuslin.sourceforge.net/}\\
	\hline
	\textbf{Ventajas} & \textbf{Desventajas}\\
	\hline
	\begin{itemize}
	\item Juzgamiento automático.
	\item Servidor y cliente se ejecutan en plataformas Linux.
	\item Provee interfaz gráfica para usuario del aplicativo cliente e interfaz modo consola para servidor judgin.
	\item Soporta ejecución del judgin en entorno chroot: seguridad para sistema que aloja el judgin.
	\item Juzga algoritmos implementados en : C, C++ y Pascal.
	\end{itemize} & 
	\begin{itemize}
	\item Aplicación desktop.
	\item Ofrece un único perfil de usuario: contestant.
	\item Atiende sólo un usuario (contestant).  
	\item No juzga algoritmos implementados en Java, no cumple con normas ACM-ICPC.
	\end{itemize}\\
	\hline
	%\end{tabular}
	%\end{center}
	%\end{table}

	%\begin{table}[H]
	%\caption{Sistema de juzgamiento Celiz}
	%\label{tb:celiz}
	%\begin{center}
	%\begin{tabular}{|p{6.5cm}|p{6.5cm}|}
	\hline
	\multicolumn{2}{>{\columncolor[gray]{0.8}}c}{\textbf{Celiz Judge System}} \\
	\hline
	\hline
	Lenguaje de implementación & C, C++\\
	\hline
	Licencia & GPL, GNU Library or Lesser General Public License (LGPL) \\
	\hline
	Obtener código fuente & \url{http://sourceforge.net/projects/celiz/files/latest/download}\\
	\hline
	\textbf{Ventajas} & \textbf{Desventajas}\\
	\hline
	\begin{itemize}
	\item Juzgamiento automático.
	\item Servidor y cliente corren en plataformas Linux y BSD.
	\item Provee interfaces de usuario en modo consola y  X Window System (X11). 
	\item Juzga algoritmos implementados en : C, C++ y Pascal.
	\end{itemize} & 
	\begin{itemize}
	\item Aplicación de escritorio.
	\item No ofrece entorno chroot para ejecución de judgin.
	\item Ofrece un único perfil de usuario: contestant.
	\item Atiende sólo un usuario (contestant).
	\item No juzga algoritmos implementados en Java, no cumple con normas ACM-ICPC.
	\end{itemize}\\
	\hline
	\end{tabular}
	\end{center}
	\end{table}

	\begin{table}[H]
	\caption{Sistemas de juzgamiento: Mooshak; CodeCracker}
	\label{tb:mooshak}
	\begin{center}
	\begin{tabular}{|p{6.5cm}|p{6.5cm}|}
	\hline
	\multicolumn{2}{>{\columncolor[gray]{0.8}}c}{\textbf{Mooshak}} \\
	\hline
	\hline
	Lenguaje de implementación & tcl, HTML\\
	\hline
	Licencia & Artistic License/GPL \\
	\hline
	Obtener código fuente & \url{http://code.google.com/p/mooshak/downloads/list}\\
	\hline
	\textbf{Ventajas} & \textbf{Desventajas}\\
	\hline
	\begin{itemize}
	\item Tipo de aplicación: web, cliente puede ser ejecutado en cualquier plataforma.
	\item Juzgamiento automático.
	\item Servidor se ejecuta en plataformas Linux.
	\item Ofrece cuatro perfiles de usuario, admin, jury, contestant y public. 
	\item Juzga algoritmos implementados en : C, C++, Java, Perl y Python.
	\end{itemize} & 
	\begin{itemize}
	\item No ofrece opción de ejecución en entorno chroot.
	\item No juzga algoritmos implementados en Pascal, incumple normas ACM-ICPC.
	\item Si bien atiende y juzga los sometimientos de forma automática, se requiere la intervención del jury para aceptar y publicar el resultado.
	\end{itemize}\\
	\hline
	%\end{tabular}
	%\end{center}
	%\end{table}
	
	%\begin{table}[H]
	%\caption{Sistema de juzgamiento CodeCracker}
	%\label{tb:codecrac}
	%\begin{center}
	%\begin{tabular}{|p{6.5cm}|p{6.5cm}|}
	\hline
	\multicolumn{2}{>{\columncolor[gray]{0.8}}c}{\textbf{CodeCracker}} \\
	\hline
	\hline
	Lenguaje de implementación & C++, php.\\
	\hline
	Licencia & GNU GPL v3\\
	\hline
	Obtener código fuente & \url{http://code.google.com/p/ccnitdgp/downloads/list}\\
	\hline
	\textbf{Ventajas} & \textbf{Desventajas}\\
	\begin{itemize}
	\item Aplicación tipo web.
	\item Sistema de juzgamiento automático.
	\item Servidor ejecutable en plataformas Linux.
	\item Provee dos perfiles de usuario: admin y team.
	\end{itemize} & 
	\begin{itemize}
	\item No individualiza roles de admin y jury.
	\item No ofrece entorno de ejecución chroot.
	\item Sólo juzga programas escritos en C y C++, incumple normas ACM-ICPC.
	\end{itemize}\\
	\hline
	\end{tabular}
	\end{center}
	\end{table}

	\begin{table}[H]
	\caption{Sistemas de juzgamiento: taskeval; uevalrun}
	\label{tb:taskeval}
	\begin{center}
	\begin{tabular}{|p{6.5cm}|p{6.5cm}|}
	\hline
	\multicolumn{2}{>{\columncolor[gray]{0.8}}c}{\textbf{taskeval}} \\
	\hline
	\hline
	Lenguaje de implementación & C, Python.\\
	\hline
	Licencia & GNU GPL v3\\
	\hline
	Obtener código fuente & \url{http://code.google.com/p/taskeval/downloads/list}\\
	\hline
	\textbf{Ventajas} & \textbf{Desventajas}\\
	\begin{itemize}
	\item Sistema de juzgamiento automático.
	\item Sistema ejecutable en plataformas Linux.
	\item Provee una API para la creación de contest, una interfaz GUI para el usuario(contestant) y una interfaz de consola para la ejecución del juez.
	\item Los sometimientos se ejecutan en un entorno chroot.
	\end{itemize} & 
	\begin{itemize}
	\item Aplicación desktop.
	\item No adopta normas ACM-ICPC.
	\end{itemize}\\
	\hline
	%\end{tabular}
	%\end{center}
	%\end{table}

	%\begin{table}[H]
	%\caption{Sistema de juzgamiento uevalrun}
	%\label{tb:uevalrun }
	%\begin{center}
	%\begin{tabular}{|p{6.5cm}|p{6.5cm}|}
	\hline
	\multicolumn{2}{>{\columncolor[gray]{0.8}}c}{\textbf{uevalrun }} \\
	\hline
	\hline
	Lenguaje de implementación & C, Bash.\\
	\hline
	Licencia & GNU GPL v2\\
	\hline
	Obtener código fuente & \url{http://pts-mini-gpl.googlecode.com/svn/trunk/uevalrun/}\\
	\hline
	\textbf{Ventajas} & \textbf{Desventajas}\\
	\begin{itemize}
	\item Los sometimientos se juzgan de manera automática.
	\item Sistema ejecutable en plataformas Linux.
	\item Ejecuta  los sometimientos en un entorno chroot.
	\item Juzga algoritmos implementados en : C, C++, Python, Ruby, Perl, Lua y PHP.  
	\end{itemize} & 
	\begin{itemize}
	\item Aplicación desktop.
	\item No juzga algoritmos implementados en lenguaje Java, incumple normas ACM-ICPC.
	\end{itemize}\\
	\hline
	\end{tabular}
	\end{center}
	\end{table}


	\begin{table}[H]
	\caption{Sistemas de juzgamiento: DevContest; DOMjudge}
	\label{tb:devContest }
	\begin{center}
	\begin{tabular}{|p{6.5cm}|p{6.5cm}|}
	\hline
	\multicolumn{2}{>{\columncolor[gray]{0.8}}c}{\textbf{DevContest}} \\
	\hline
	\hline
	Lenguaje de implementación & Python.\\
	\hline
	Licencia & GNU GPL v3\\
	\hline
	Obtener código fuente & \url{https://github.com/yetty/DevContest}\\
	\hline
	\textbf{Ventajas} & \textbf{Desventajas}\\
	\begin{itemize}
	\item Aplicativo web.
	\item Juzgamiento automático.
	\item Sistema ejecutable en plataformas Linux.
	\item Juzga algoritmos implementados en : C, C++, Java, Pascal, Python, PHP y Ruby.  
	\end{itemize} & 
	\begin{itemize}
	\item No provee entorno chroot para ejecución de sometimientos.
	\item Gestiona contests enfocados a clases de programación, no contempla reglamento definido por ACM-ICPC.
	\end{itemize}\\
	\hline
	%\end{tabular}
	%\end{center}
	%\end{table}

	%\begin{table}[H]
	%\caption{Sistema de juzgamiento DOMjudge}
	%\label{tb:domjudge }
	%\begin{center}
	%\begin{tabular}{|p{6.5cm}|p{6.5cm}|}
	\hline
	\multicolumn{2}{>{\columncolor[gray]{0.8}}c}{\textbf{DOMjudge}} \\
	\hline
	\hline
	Lenguaje de implementación & C, C++, PHP, Bash.\\
	\hline
	Licencia & GNU General Public License(GPL), BSD License, MIT License\\
	\hline
	Obtener código fuente & \url{http://domjudge.sourceforge.net/download}\\
	\hline
	\textbf{Ventajas} & \textbf{Desventajas}\\
	\begin{itemize}
	\item Aplicación web.
	\item Juzgamiento automático.
	\item Servidor ejecutable en plataformas Linux.
	\item Provee perfiles para usuario: admin, jury, team y public.
	\item Ofrece entorno chroot para ejecución de sometimientos.
	\item Juzga algoritmos implementados en : Bash, C, C++, Haskell, Java, Pascal, Perl y Python.
	\item Adopta reglamento definido por ACM-ICPC.
	\end{itemize} & 
	\begin{itemize} 
	\item No permite desarrollar más de un contest al tiempo.
	\end{itemize}\\
	\hline
	\end{tabular}
	\end{center}
	\end{table}

	\begin{table}[H]
	\caption{Sistemas de juzgamiento: OKO; Boca}
	\label{tb:oko }
	\begin{center}
	\begin{tabular}{|p{6.5cm}|p{6.5cm}|}
	\hline
	\multicolumn{2}{>{\columncolor[gray]{0.8}}c}{\textbf{OKO Online Judge}} \\
	\hline
	\hline
	Lenguaje de implementación & C++, JSP, Java.\\
	\hline
	Licencia & MIT License\\
	\hline
	Obtener código fuente & \url{http://oko-onlinejudge.svn.sourceforge.net/viewvc/oko-onlinejudge/}\\
	\hline
	\textbf{Ventajas} & \textbf{Desventajas}\\
	\begin{itemize}
	\item Aplicación web.
	\item Juzgamiento automático.
	\item Juzga algoritmos implementados en : C, C++, Java y Pascal.  
	\end{itemize} & 
	\begin{itemize} 
	\item Ofrece un único perfil de usuario.
	\item Permite desarrollar un único contest al tiempo.
	\end{itemize}\\
	\hline
	%\end{tabular}
	%\end{center}
	%\end{table}

	%\begin{table}[H]
	%\caption{Sistema de juzgamiento Boca}
	%\label{tb:boca }
	%\begin{center}
	%\begin{tabular}{|p{6.5cm}|p{6.5cm}|}
	\hline
	\multicolumn{2}{>{\columncolor[gray]{0.8}}c}{\textbf{Boca Online Contest Administrator}} \\
	\hline
	\hline
	Lenguaje de implementación & PHP.\\
	\hline
	Licencia & Q Public License Version 1.0\\
	\hline
	Obtener código fuente & \url{http://bombonera.ime.usp.br/linux/icpclinux/}\\
	\hline
	\textbf{Ventajas} & \textbf{Desventajas}\\
	\begin{itemize}
	\item Aplicación web.
	\item Ofrece la opción de juzgamiento automático o manual.
	\item Servidor ejecutable en plataformas Linux.
	\item Posee perfiles de usuario: admin, jury, team, staff y public.
	\item Provee versión para virtualizar. 
	\item Juzga algoritmos implementados en lenguajes como: C, C++, Java.
	\item Adopta reglamento definido por ACM-ICPC.
	\end{itemize} & 
	\begin{itemize} 
	\item No permite desarrollar más de un contest al tiempo.
	\end{itemize}\\
	\hline
	\end{tabular}
	\end{center}
	\end{table}	

Tras la consulta, los aplicativos Boca y DOMjudge resultan de gran interés para los objetivos del proyecto, puesto que no solo  cumplen con los criterios establecidos en \ref{criter}, sino que además, se han utilizado en importantes contests\footnote{En el caso de Boca, en http://www.ime.usp.br/~cassio/boca/where.html, existe una lista de contests que lo han usado.\\
Domjudge por su parte, cuenta con un listado en: http://domjudge.sourceforge.net/intro}. Sin embargo, la estructura modular del sistema \textbf{DOMjudge} y el activo desarrollo\footnote{El último release de Boca fue hecho el 2 de noviembre de 2011, tal como se registra en: http://bombonera.ime.usp.br/linux/icpclinux/, mientras que DOMjudge libero su ultima versión estable el 25 de enero de 2012 y está trabajando en su próxima versión, como se evidencia en: http://domjudge.sourceforge.net/download} de la comunidad que lo mantiene, son factores determinantes para elegirlo como el juez a adaptar. 	

\subsection{COMPRENSIÓN DEL JUEZ ELEGIDO PARA EL PROYECTO}

Los recursos de que se dispone para comprender el sistema de juzgamiento DOMjudge, son: interactuar con el sistema, consultar la documentación e interpretar el código fuente, proveídos por el mismo.\\
La interacción se logra mediante la instalación de la aplicación en un computador para pruebas.\\

Con la utilización de dichos recursos se sintetiza información indispensable para  obtener una visión del sistema.\\

\textbf{ARQUITECTURA DE HARDWARE}\label{arq_hard}

Como se observa en la figura \ref{fig:arq_hard}, el sistema DOMjudge se integra a través de una arquitectura cliente servidor y está constituido por tres diferentes tipos de hosts:

	\begin{itemize}\label{def_hosts}

	\item\textbf{Team host}:\newline
Es el computador donde el team implementa y envía los algoritmos a ser sometidos.

	\item\textbf{DOMjudge server o domserver}:\newline
Es la máquina que ejecuta el servidor de bases de datos y el servidor web, recibe los sometimientos enviados por el team y da una respuesta de los mismos.

	\item\textbf{Judgehost}:\newline
Hace referencia al host encargado de ejecutar el \textbf{judgedaemon}.\\
El \textbf{judgedaemon} es un servidor que toma los  sometimientos recibidos por el \textbf{domserver}, los compila  y ejecuta para enviar una respuesta de los mismos al \textbf{domserver}.

	\end{itemize}

	\begin{figure}[H]	
	\caption{Diagrama de arquitectura de hardware}
	\label{fig:arq_hard}
	\begin{center}
	\fbox{\includegraphics[width=15cm]{imagenes/diagramas/arq_ard_domjudge.png}}
	\end{center}		
	\end{figure}

La figura \ref{fig:arq_hard} muestra una arquitectura de hardware ideal, donde se cuenta con una máquina adicional para alojar el judgehost, sin embargo, este puede ser alojado en la misma máquina que alberga el \textbf{domserver}[\ref{def_hosts}].\\\\


\textbf{SUBMISSION FLOW}\label{sub_flow}

	\begin{figure}[H]	
	\caption{Recorrido de un submission}
	\label{fig:mensajes}
	\begin{center}
	\fbox{\includegraphics[width=15cm]{imagenes/diagramas/mensajesDom.png}}
	\end{center}		
	\end{figure}


\textbf{ESTRUCTURA DE DIRECTORIOS DOMjudge}\label{estruc_dirs}

Para la exposición de directorios, se establecen las siguientes convenciones:
 
	\vspace{0.5cm}
	\begin{figure}[H]	
	\caption{Convenciones para tipos de ficheros}
	\label{fig:convenciones}
	\begin{center}
	\fbox{\includegraphics[width=8cm]{imagenes/diagramas/simbolos.png}}
	\end{center}		
	\end{figure}

Teniendo en cuenta las convenciones, es apropiado decir que DOMjudge se compone de los módulos \textbf{domserver} y \textbf{judgehost}, los cuales se integran por directorios que agrupan el código fuente de acuerdo a su función, tal como se aprecia en la figura \ref{fig:esct_dir_DOMjudge}.

	\vspace{0.5cm}
	 \begin{figure}[H]	
	\caption{Estructura de directorios DOMjudge}
	\label{fig:esct_dir_DOMjudge}
	\begin{center}
	\fbox{\includegraphics[width=15cm]{imagenes/diagramas/DOMjudge.png}}
	\end{center}		
	\end{figure}

\clearpage
\textbf{MÓDULO domserver}\\

	\begin{itemize}

		\item\textbf{bin}: contine el script dj-setup-database, permite generar la base de datos del sistema.
	
		\vspace{0.5cm}
		\begin{figure}[H]	
		\caption{domserver/bin}
		\label{fig:dom_bin}
		\begin{center}
		\fbox{\includegraphics[width=5cm]{imagenes/diagramas/dom_bin.png}}
		\end{center}		
		\end{figure}

		\item\textbf{lib}: contiene scripts que son utilizados desde diferentes partes del sistema domserver.\\
Tal como muestra la figura \ref{fig:dom_lib} lib se compone de un conjunto de scripts generales y los subdirectorios www y submit.\\
En lib/www se almacenan scripts necesarios para las interfaces web  de jury, admin y plublic.
	
		\vspace{0.5cm}
		\begin{figure}[H]	
		\caption{domserver/lib}
		\label{fig:dom_lib}
		\begin{center}
		\fbox{\includegraphics[width=14.5cm]{imagenes/diagramas/dom_lib.png}}
		\end{center}		
		\end{figure}

		\item\textbf{log}: almacena archivos de bitácoras generados por domserver.

		\item\textbf{submissions}: guarda los algoritmos sometidos por el team.
		\clearpage

		\item\textbf{etc}: ficheros y scripts de configuración comunes para todo el sistema.

		\vspace{0.5cm}
		\begin{figure}[H]	
		\caption{domserver/ect}
		\label{fig:dom_etc}
		\begin{center}
		\fbox{\includegraphics[width=9cm]{imagenes/diagramas/dom_etc.png}}
		\end{center}		
		\end{figure}

%Tal como se aprecia en la figura \ref{fig:dom_etc}, el fichero de configuración \textbf{apache.conf} contiene las directivas que el servidor web apache debe ejecutar para DOMjudge.\\
%En el script php \textbf{domserver-static.php} se definen constantes que permiter invocar a diferentes subdirectorios del domserver, por ejemplo: LIBSUBMITDIR permite accesar a /usr/local/domjudge/domserver/lib/submit.\\

		\item\textbf{sql}: contiene ficheros sql necesarios para construir la base de datos DOMjudge.
	
		%\vspace{0.3cm}
		\begin{figure}[H]	
		\caption{domserver/sql}
		\label{fig:dom_aql}
		\begin{center}
		\fbox{\includegraphics[width=15cm]{imagenes/diagramas/dom_sql.png}}
		\end{center}		
		\end{figure}

		\item\textbf{tmp}: aloja archivos temporales generados en el domserver.

		\item\textbf{www}: contiene todos los archivos necesarios para el funcionamiento de la interfaz web del sistema.

		\vspace{0.5cm}
		\begin{figure}[H]	
		\caption{domserver/www}
		\label{fig:dom_www}
		\begin{center}
		\fbox{\includegraphics[width=10cm]{imagenes/diagramas/dom_www.png}}
		\end{center}		
		\end{figure}

		Tal como se evidencia en la anterior figura, el directorio www es bastante robusto y está constituido por otros subdirectorios, donde se agrupa código fuente que implementa interfaces web acordes al perfil de usuario.\\
	
		\clearpage

		\textbf{Directorio para interfaz web del team}:
		\vspace{0.5cm}
		\begin{figure}[H]	
		\caption{domserver/www/team}
		\label{fig:dom_www_team}
		\begin{center}
		\fbox{\includegraphics[width=14cm]{imagenes/diagramas/dom_www_team.png}}
		\end{center}		
		\end{figure}

		\vspace{0.5cm}
		\textbf{Directorio para interfaz web jury}:
		\vspace{0.5cm}
		\begin{figure}[H]	
		\caption{domserver/www/jury}
		\label{fig:dom_www_jury}
		\begin{center}
		\fbox{\includegraphics[width=15cm]{imagenes/diagramas/dom_www_jury.png}}
		\end{center}		
		\end{figure}

		\vspace{0.5cm}
		\textbf{Directorio para interfaz web public}:
		\vspace{0.5cm}
		\begin{figure}[H]	
		\caption{domserver/www/public}
		\label{fig:dom_www_public}
		\begin{center}
		\fbox{\includegraphics[width=9cm]{imagenes/diagramas/dom_www_public.png}}
		\end{center}		
		\end{figure}
		\clearpage

		\textbf{Directorio plugin}:\\
		 contiene los scripts necesarios para la actualización del scoreboard.
		\vspace{0.5cm}
		\begin{figure}[H]	
		\caption{domserver/www/plugin}
		\label{fig:dom_www_plugin}
		\begin{center}
		\fbox{\includegraphics[width=10cm]{imagenes/diagramas/dom_www_plugin.png}}
		\end{center}		
		\end{figure}

		\vspace{0.5cm}
		\textbf{Directorio js}:
		\vspace{0.5cm}
		\begin{figure}[H]	
		\caption{domserver/www/js}
		\label{fig:dom_www_js}
		\begin{center}
		\fbox{\includegraphics[width=10cm]{imagenes/diagramas/dom_www_js.png}}
		\end{center}		
		\end{figure}

	\end{itemize}

\vspace{1.0cm}
\textbf{MÓDULO judgehost}:\\
	\begin{itemize}
	
		\item\textbf{bin}: contiene los daemons necesarios para ejecutar el judgehost.
		\vspace{0.5cm}
		\begin{figure}[H]	
		\caption{judgehost/bin}
		\label{fig:jud_bin}
		\begin{center}
		\fbox{\includegraphics[width=5cm]{imagenes/diagramas/jud_bin.png}}
		\end{center}		
		\end{figure}

		\item\textbf{chroot}: contiene todo un sistema de directorios que permite ejecutar el juez en un subsistema independiente del sistema operativo que lo aloja.
		\clearpage

		\item\textbf{etc}: ficheros y scripts de configuración utilizados en todo el judgehost.	
		\vspace{0.5cm}
		\begin{figure}[H]	
		\caption{judgehost/etc}
		\label{fig:jud_etc}
		\begin{center}
		\fbox{\includegraphics[width=7cm]{imagenes/diagramas/jud_etc.png}}
		\end{center}		
		\end{figure}

		\item\textbf{submissions}: Guarda el resultado de los algoritmos juzgados por el sistema.

		\item\textbf{lib}: contiene scripts que son utilizados por el sistema judgehost.\\
		\vspace{0.5cm}
		\begin{figure}[H]	
		\caption{judgehost/lib}
		\label{fig:jud_lib}
		\begin{center}
		\fbox{\includegraphics[width=15cm]{imagenes/diagramas/jud_lib.png}}
		\end{center}		
		\end{figure}

		\item\textbf{log}: contiene un fichero que notifica el comportamiento del judgedaemon durante su ejecución\\
		\vspace{0.5cm}
		\begin{figure}[H]	
		\caption{judgehost/log}
		\label{fig:jude_log}
		\begin{center}
		\fbox{\includegraphics[width=5cm]{imagenes/diagramas/jud_log.png}}
		\end{center}		
		\end{figure}
		
		\item\textbf{tmp}: aloja archivos temporales generados por el judgehost.\\\\
	
	\end{itemize}

	\vspace{0.4cm}

\textbf{MODELO ENTIDAD RELACIÓN DB domjudge}\label{er_domjudge}\\

	\begin{figure}[H]	
	\caption{Modelo entidad relación DB domjudge}
	\label{fig:er_domjud}
	\begin{center}
	\fbox{\includegraphics[width=15cm]{imagenes/EERdomjudge.png}}
	\end{center}		
	\end{figure}

La figura \ref{fig:er_domjud} muestra el diagrama entidad relación correspondiente a la DB  domjudge que se instala con el sistema de juzgamiento DOMjudge, seguidamente se desglosan las entidades que le integran:
	
	\begin{itemize}
	
		\item\textbf{clarification}\\
Almacena datos de clarificaciones realizadas desde teams hacia el juez y viceversa, durante el actual contest.

	\begin{figure}[H]	
	\caption{Entidad clarification}
	\label{fig:clarification}
	\begin{center}
	\includegraphics[width=3cm]{imagenes/clarification.png}
	\end{center}		
	\end{figure} 
		
	\item\textbf{configuration}\\
Guarda variables de configuración global del sistema.

	\begin{figure}[H]	
	\caption{Entidad configuration}
	\label{fig:configuration}
	\begin{center}
	\includegraphics[width=3cm]{imagenes/configuration.png}
	\end{center}		
	\end{figure} 

	\item\textbf{contest}\\
Datos referentes a los diferentes contest que se llevan a cabo.

	\begin{figure}[H]	
	\caption{Entidad contest}
	\label{fig:contest}
	\begin{center}
	\includegraphics[width=4cm]{imagenes/contest.png}
	\end{center}		
	\end{figure}

	\item\textbf{event}\\
Bitácora de eventos durante cada contest que se esté desarrollando.

	\begin{figure}[H]	
	\caption{Entidad event}
	\label{fig:event}
	\begin{center}
	\includegraphics[width=3cm]{imagenes/event.png}
	\end{center}		
	\end{figure}

	\item\textbf{judgehost}\\
Listado de hostnames de máquinas donde se hospeda el judgehost.

	\begin{figure}[H]	
	\caption{Entidad judgehost}
	\label{fig:judgehost}
	\begin{center}
	\includegraphics[width=3cm]{imagenes/judgehost.png}
	\end{center}		
	\end{figure}

	\item\textbf{judging}\\
Almacena el resultado de cada uno de los sometimientos realizados por el team.

	\begin{figure}[H]	
	\caption{Entidad judgin}
	\label{fig:judgin}
	\begin{center}
	\includegraphics[width=3cm]{imagenes/judgin.png}
	\end{center}		
	\end{figure}

	\item\textbf{judging\_run}\\
Guarda resultados de ejecutar sometimientos con cada uno de los casos de prueba respectivos.

	\begin{figure}[H]	
	\caption{Entidad judging\_run}
	\label{fig:judging_run}
	\begin{center}
	\includegraphics[width=3cm]{imagenes/judginrun.png}
	\end{center}		
	\end{figure}

	\item\textbf{language}\\
Listado de lenguajes habilitados para someter los algoritmos.

	\begin{figure}[H]	
	\caption{Entidad language}
	\label{fig:language}
	\begin{center}
	\includegraphics[width=3cm]{imagenes/language.png}
	\end{center}		
	\end{figure}

	\item\textbf{problem}\\
Problemas asociados a un determinado contest, para los cuales se pude hacer submit.

	\begin{figure}[H]	
	\caption{Entidad problem}
	\label{fig:problem}
	\begin{center}
	\includegraphics[width=3cm]{imagenes/problem.png}
	\end{center}		
	\end{figure}

	\item\textbf{scoreboard\_jury}\\
Almacena datos referentes al actual contest, necesarios para construir el scoreboard de la interfaz  jury.

	\begin{figure}[H]	
	\caption{Entidad scoreboard\_jury}
	\label{fig:scoreboard_jury}
	\begin{center}
	\includegraphics[width=3cm]{imagenes/scoreboardjury.png}
	\end{center}		
	\end{figure}	

	\item\textbf{scoreboard\_public}\\
Guarda datos correspondientes al actual contest, requeridos para construir la versión pública del scoreboard, exhibida en interfaces public y team.
	\begin{figure}[H]	
	\caption{Entidad scoreboard\_public}
	\label{fig:scoreboard_public}
	\begin{center}
	\includegraphics[width=3cm]{imagenes/scoreboardpublic.png}
	\end{center}		
	\end{figure}

	\item\textbf{submission}\\
Registra todos los sometimientos realizados por teams.

	\begin{figure}[H]	
	\caption{Entidad submission}
	\label{fig:submission}
	\begin{center}
	\includegraphics[width=3cm]{imagenes/submission.png}
	\end{center}		
	\end{figure}

	\item\textbf{team}\\
Listado de cuentas para usuarios teams del aplicativo.

	\begin{figure}[H]	
	\caption{Entidad team}
	\label{fig:team}
	\begin{center}
	\includegraphics[width=4cm]{imagenes/team.png}
	\end{center}		
	\end{figure}

	\item\textbf{team\_affiliation}\\
Almacena la afiliación correspondiente a cada team, dato mediante el cual es posible clasificar los teams del sistema.
	
	\begin{figure}[H]	
	\caption{Entidad team\_affiliation}
	\label{fig:team_affiliation}
	\begin{center}
	\includegraphics[width=3cm]{imagenes/teamaffiliation.png}
	\end{center}		
	\end{figure}

	\item\textbf{team\_category}\\
Guarda la categoría de cada team, de modo que se pueda distinguir entre participantes, organizadores, etc.
	
	\begin{figure}[H]	
	\caption{Entidad team\_category}
	\label{fig:team_category}
	\begin{center}
	\includegraphics[width=3cm]{imagenes/teamcategory.png}
	\end{center}		
	\end{figure}

	\item\textbf{team\_unread}\\
Lista teams que nunca se han logueado en el sistema.

	\begin{figure}[H]	
	\caption{Entidad team\_unread}
	\label{fig:team_unread}
	\begin{center}
	\includegraphics[width=3cm]{imagenes/teamunread.png}
	\end{center}		
	\end{figure}

	\item\textbf{testcase}\\
Almacena los testcases de cada problema.
	
	\begin{figure}[H]	
	\caption{Entidad testcase}
	\label{fig:testcase}
	\begin{center}
	\includegraphics[width=3cm]{imagenes/testcase.png}
	\end{center}		
	\end{figure}
	
	\end{itemize}

	\vspace{0.4cm}

\textbf{ACTORES Y TAREAS}:\label{act_tar}\\

DOMjudge cuenta con cuatro perfiles de usuario admin, jury, team y public.

	\begin{itemize}

		\item\textbf{admin}:\\
El administrador del sistema es el encargado de instalarlo, configurarlo y realizar las operaciones de mantenimiento pertinentes para garantizar su debido funcionamiento. \\
Entre las tareas que le corresponden, están:

		\begin{itemize}
		
		\item Adicionar y editar contests.

		\item Crear y editar, problemas y testcases.
		
		\item Crear teams.
			
		\item Administrar los passwords de teams

		\item Chequear la configuración del sistema.

		\item Refrescar el scoreboard.

		\item Rejuzgar  sometimientos.
	
		\item Reiniciar juzgamientos pendientes.
		
		\item Levantar el judgedaemon.\\

Adicional a esto, el admin tiene la posibilidad de realizar las mismas funciones del jury. 

		\end{itemize}
		
		\clearpage

		\item\textbf{jury}:\\
El jury desempeña sus labores durante el contest, las cuales son:
		
		\begin{itemize}
		
		\item Chequear los submissions.
	
		\item Atender las clarificaciones.

		\item Chequear el scoreboard del jury.	

		\item Inspeccionar el estado de teams.

		\end{itemize}  

		\item\textbf{team}:\\
El team es un usuario que posee cuenta para utilizar el sistema de juzgamiento, se clasifica en tres categorías: Observers, Participants y Organization.
Entre las posibles labores que puede realizar, están:
		
		\begin{itemize}

		\item Someter algoritmos.
	
		\item Enviar clarificaciones.	

		\item Visualizar el scoreboard público.
	
		\end{itemize}

		\item\textbf{public}:\\
Public es todo usuario externo a un contest, es decir, que no se clasifica como ninguno de los anteriores teams. La única función que puede desempeñar es visualizar el scoreboard público.
	\end{itemize}


\vspace{1.0cm}
\subsection{DOCUMENTACIÓN CASOS DE USO}\label{casos_uso}

Tras el análisis realizado a la arquitectura de hardware[\ref{fig:arq_hard}], el recorrido de submissions[\ref{fig:mensajes}], la estructura de directorios[\ref{fig:esct_dir_DOMjudge}], el modelo entidad relación[\ref{fig:er_domjud}] y los roles de actores [\ref{act_tar}], se obtiene un claro entendimiento del sistema de juzgamiento DOMjudge, por consiguiente, es pertinente continuar con el estudio de los casos de uso, correspondientes a los requerimientos definidos en \ref{requerimientos}.

		\begin{table}[H]
		\caption{Caso de uso 1: Crear External Contest}
		\label{tb:caso1}
		\begin{center}
		\begin{tabular}{|p{7cm}|p{7cm}|}
		\hline
		\cellcolor[gray]{0.8}Caso de uso & \cellcolor[gray]{0.8}Crear External Contest\\
		\hline
		Actor: \textbf{admin} & Referencia: 1 \\ 
		\hline
		Precondición: el administrador se ha logueado correctamente. & Postcondición: el sistema muestra el External Contest creado.\\
		\hline
		\textbf{Acción de los actores} & \textbf{Respuesta del sistema} \\
		\hline
		\textbf{1.} Accede al link External Contests. & \textbf{2.1} Busca en la base de datos contests con valor cero en los campos inner y post.\newline
		\textbf{2.2} Lista los External Contests existentes y muestra un icono para crear nuevos External Contest.\\
		\hline
		\textbf{3.} Da click en el icono add.  & \textbf{4.} Muestra el formulario Add External Contest, con sus respectivo campos.\\
		\hline
		\textbf{5.} Llena los campos correspondientes, guarda el formulario. & \textbf{6.1} Valida los datos del formulario.\newline
		\textbf{6.2} Guarda los datos en la base de datos.\newline
		\textbf{6.3} Retorna a la lista de External Contest existentes.\\
		\hline
		\multicolumn{2}{|c|}{\textbf{Cursos Alternos}} \\
		\hline
		\textbf{6.1} Error en validación de datos. & Mostrar Mensaje de error respectivo.\\
		\hline
		\end{tabular}
		\end{center}
		\end{table}

		\begin{table}[H]
		\caption{Caso de uso 2: Crear Internal Contest}
		\label{tb:caso2}
		\begin{center}
		\begin{tabular}{|p{7cm}|p{7cm}|}
		\hline
		\cellcolor[gray]{0.8}Caso de uso & \cellcolor[gray]{0.8}Crear Internal Contest \\
		\hline
		Actor: \textbf{admin} & Referencia: 2 \\ 
		\hline
		Precondición: el administrador se ha logueado correctamente. & Postcondición: el sistema muestra el Internal Contest creado.\\
		\hline
		\textbf{Acción de los actores} & \textbf{Respuesta del sistema} \\
		\hline
		\textbf{1.} Accede al link Internal Contests. & \textbf{2.1} Busca en la base de datos contests con valor uno en el campo inner y valor cero en el campo post.\newline
		\textbf{2.2} Lista los Internal Contests existentes y muestra un icono para crear nuevos Internal contests.\\
		\hline
		\textbf{3.} Da click en el icono add.  & \textbf{4.} Muestra el formulario Add Internal Contest, con sus respectivo campos.\\
		\hline
		\textbf{5.} Llena los campos correspondientes, guarda el formulario. & \textbf{6.1} Valida los datos del formulario.\newline
		\textbf{6.2} Guarda los datos en la base de datos.\newline
		\textbf{6.3} Retorna al listado de Internal Contest existentes.\\
		\hline
		\multicolumn{2}{|c|}{\textbf{Cursos Alternos}} \\
		\hline
		\textbf{6.1} Error en validación de datos. & Mostrar Mensaje de error respectivo.\\
		\hline
		\end{tabular}
		\end{center}
		\end{table}

		\begin{table}[H]
		\caption{Caso de uso 3: Crear Postmaratón}
		\label{tb:caso3}
		\begin{center}
		\begin{tabular}{|p{7cm}|p{7cm}|}
		\hline
		\cellcolor[gray]{0.8}Caso de uso & \cellcolor[gray]{0.8}Crear Postmaratón \\
		\hline
		Actor: \textbf{admin} & Referencia: 3 \\ 
		\hline
		Precondición: el administrador se ha logueado correctamente. & Postcondición: el sistema muestra la Postmaratón creada.\\
		\hline
		\textbf{Acción de los actores} & \textbf{Respuesta del sistema} \\
		\hline
		\textbf{1.} Accede al link Postmaratones. & \textbf{2.1} Busca en la base de datos contests con valor cero en el campo inner y valor uno en el campo post.\newline
		\textbf{2.2} Lista las Postmaratones existentes y muestra un icono para crear nuevas Postmaratones.\\
		\hline
		\textbf{3.} Da click en el icono add.  & \textbf{4.} Muestra el formulario Add Postmaratón, con sus respectivo campos.\\
		\hline
		\textbf{5.} Llena los campos correspondientes, guarda el formulario. & \textbf{6.1} Valida los datos del formulario.\newline
		\textbf{6.2} Guarda los datos en la base de datos.\newline
		\textbf{6.3} Retorna lista de  Postmaratones existentes.\\
		\hline
		\multicolumn{2}{|c|}{\textbf{Cursos Alternos}} \\
		\hline
		\textbf{6.1} Error en validación de datos. & Mostrar Mensaje de error respectivo.\\
		\hline
		\end{tabular}
		\end{center}
		\end{table}

		\begin{table}[H]
		\caption{Caso de uso 4: Habilitar/Deshabilitar team externo}
		\label{tb:caso4}
		\begin{center}
		\begin{tabular}{|p{7cm}|p{7cm}|}
		\hline
		\cellcolor[gray]{0.8}Caso de uso & \cellcolor[gray]{0.8}Habilitar/Deshabilitar team externo \\
		\hline
		Actor: \textbf{admin} & Referencia: 4 \\ 
		\hline
		Precondición: administrador logueado correctamente; el team existe. & Postcondición: El sistema habilita/deshabilita el team para el actual contest.\\
		\hline
		\textbf{Acción de los actores} & \textbf{Respuesta del sistema} \\
		\hline
		\textbf{1} Accede al menú teams. & \textbf{2.1} Selecciona de la DB todos los teams existente y sus respectivos atributos.\newline
		\textbf{2.2} Lista los teams existentes y muestra iconos para operaciones posibles.\\
		\hline
		 \textbf{3.1} Habilita el campo enable del o los teams correspondientes.\newline
		  \textbf{3.2}  Guarda los cambios. & \textbf{5.} Actualiza en la DB el campo enable del team.\newline
		\textbf{4.2} Regresa al listado de teams.\\
		\hline
		\end{tabular}
		\end{center}
		\end{table}

		\begin{table}[H]
		\caption{Caso de uso 5: Subir enunciado del problema}
		\label{tb:caso5}
		\begin{center}
		\begin{tabular}{|p{7cm}|p{7cm}|}
		\hline
		\cellcolor[gray]{0.8}Caso de uso & \cellcolor[gray]{0.8}Subir enunciado del problema \\
		\hline
		Actor: \textbf{admin} & Referencia: 5 \\ 
		\hline
		Precondición: administrador logueado correctamente. & Postcondición:\\
		\hline
		\textbf{Acción de los actores} & \textbf{Respuesta del sistema} \\
		\hline
		\textbf{1.} Accede al menú Problems. & \textbf{2.1} Selecciona de la base de datos los problemas existentes.\newline
		\textbf{2.2} Lista los problemas.\\
		\hline
		\textbf{3.} Da click en el icono upload del problema respectivo.  & \textbf{4.} Muestra un formulario.\\
		\hline
		\textbf{5.} Indica la ubicación del archivo pdf y envía el formulario. & \textbf{6.1} Valida el tipo de archivo.\newline
		\textbf{6.2} Guarda el archivo en la DB.\newline
		\textbf{6.3} Retorna al listado de problemas.\\
		\hline
		\multicolumn{2}{|c|}{\textbf{Cursos Alternos}} \\
		\hline
		\textbf{4.} Ya existe un archivo pdf asociado al problema. & \textbf{5.} Muestra las opciones: Cambiar el problema del archivo, borrar el archivo existente.\\
		\hline
		\textbf{6.} Errores en validación del archivo. & Muestra el mensaje de error respectivo.\\
		\hline
		\end{tabular}
		\end{center}
		\end{table}

		\begin{table}[H]
		\caption{Caso de uso 6: Ver enunciado del problema}
		\label{tb:caso6}
		\begin{center}
		\begin{tabular}{|p{7cm}|p{7cm}|}
		\hline
		\cellcolor[gray]{0.8}Caso de uso & \cellcolor[gray]{0.8}Ver enunciado del problema \\
		\hline
		Actor: \textbf{admin} & Referencia: 6 \\ 
		\hline
		Precondición: administrador logueado correctamente. & Postcondición:\\
		\hline
		\textbf{Acción de los actores} & \textbf{Respuesta del sistema} \\
		\hline
		\textbf{1.} Accede al menú Problems. & \textbf{2.1} Selecciona de la base de datos los problemas existentes.\newline
		\textbf{2.2} Lista los problemas.\\
		\hline
		\textbf{3.} Da click en el icono pdf del respectivo problema.  & \textbf{4.2} Selecciona de la DB el archivo pdf correspondiente al problema.\newline
		\textbf{4.2} Muestra el archivo pdf.\\
		\hline
		\multicolumn{2}{|c|}{} \\
		\hline
		Actor: \textbf{team} & Referencia: 6.1 \\ 
		\hline
		Precondición: team logueado correctamente. & Postcondición:\\
		\hline
		\textbf{Acción de los actores} & \textbf{Respuesta del sistema} \\
		\hline
		\textbf{1.} Accede al menú Problems. & \textbf{2.1} Selecciona de la base de datos los problemas existentes.\newline
		\textbf{2.2} Lista los problemas.\\
		\hline
		\textbf{3.} Da click en el icono pdf del respectivo problema.  & \textbf{4.2} Selecciona de la DB el archivo pdf correspondiente al problema.\newline
		\textbf{4.} Muestra el archivo pdf.\\
		\hline
		\end{tabular}
		\end{center}
		\end{table}
		
		%\begin{center}
		\begin{table}[p!]
		\caption{Caso de uso 7: Visualizar actual Postmaratón}
		\label{tb:caso7}
		\begin{center}
		\begin{tabular}{|p{5.5cm}|p{5.5cm}|}
		\hline
		\cellcolor[gray]{0.8}Caso de uso & \cellcolor[gray]{0.8}Visualizar actual Postmaratón \\
		\hline
		Actor: \textbf{admin} & Referencia: 7 \\ 
		\hline
		Precondición: administrador logueado correctamente; se está llevando a cabo una Postmaratón. & Postcondición: El sistema muestra detalles de la actual Postmaratón.\\
		\hline
		\textbf{Acción de los actores} & \textbf{Respuesta del sistema} \\
		\hline
		\textbf{1.} Accede al menú Curren\_post. & \textbf{2.1} Busca en la base de datos problemas, comentarios y código fuente del actual contest.\newline
		\textbf{2.2} Lista enunciados, código fuente, autores y comentarios referentes a los problemas de la actual Postmaratón.\\
		\hline
		\multicolumn{2}{|c|}{} \\
		\hline
		Actor: \textbf{team} & Referencia: 7.1 \\ 
		\hline
		Precondición: administrador logueado correctamente; se está llevando a cabo una Postmaratón. & Postcondición: El sistema muestra detalles de la actual Postmaratón.\\
		\hline
		\textbf{Acción de los actores} & \textbf{Respuesta del sistema} \\
		\hline
		\textbf{1.} Accede al menú Curren\_post. & \textbf{2.1} Busca en la base de datos problemas, comentarios y código fuente del actual contest.\newline
		\textbf{2.2} Lista enunciados, código fuente, autores y comentarios referentes a los problemas de la actual Postmaratón.\\
		\hline
		\end{tabular}
		\end{center}
		\end{table}
		%\end{center}

		\begin{table}[p!]
		\caption{Caso de uso 8: Adicionar comentario durante  actual Postmaratón}
		\label{tb:caso8}
		\begin{center}
		\begin{tabular}{|p{5.5cm}|p{5.5cm}|}
		\hline
		\cellcolor[gray]{0.8}Caso de uso & \cellcolor[gray]{0.8}Adicionar comentario durante  actual Postmaratón \\
		\hline
		Actor: \textbf{team} & Referencia: 8 \\ 
		\hline
		Precondición: Referencia 7.1; existen soluciones del problema. & Postcondición: El sistema publica el nuevo comentario.\\
		\hline
		\textbf{Acción de los actores} & \textbf{Respuesta del sistema} \\
		\hline
		\textbf{1.} Accede al problema de interés. & \textbf{2.1} Selecciona soluciones y autores del problema en la DB.\newline
		\textbf{2.2} Muestra soluciones y teams autores del problema.\\
		\hline
		 \textbf{2} Selecciona la solución a comentar. & \textbf{3.1} Selecciona el código fuente de la DB.\newline
		\textbf{3.2} Muestra el código fuente de la solución y la opción de adicionar comentario.\\
		\hline
		\textbf{4.} Edita el comentario en el campo de texto y lo publica.  & \textbf{5.1} Valida la publicación del comentario.\newline
		\textbf{5.2} Guarda el comentario en la DB.\newline
		\textbf{5.3} Regresa a la página del código fuente y sus respectivos comentarios.\\
		\hline
		\multicolumn{2}{|c|}{\textbf{Cursos Alternos}} \\
		\hline
		\textbf{5.1} Validación incorrecta. & Muestra el mensaje de error respectivo.\\
		\hline
		\end{tabular}
		\end{center}
		\end{table}

		\begin{table}[p!]
		\caption{Caso de uso 9: Descargar código fuente durante actual Postmaratón.}
		\label{tb:caso9}
		\begin{center}
		\begin{tabular}{|p{5.5cm}|p{5.5cm}|}
		\hline
		\cellcolor[gray]{0.8}Caso de uso & \cellcolor[gray]{0.8}Descargar código fuente durante actual Postmaratón.\\
		\hline
		Actor: \textbf{admin} & Referencia: 9 \\ 
		\hline
		Precondición: Referencia 7.1; existe la solución. & Postcondición: El sistema muestra un archivo de texto plano para ser descargado.\\
		\hline
		\textbf{Acción de los actores} & \textbf{Respuesta del sistema} \\
		\hline
		\textbf{1.} Selecciona la solución de interés. & \textbf{2.1} Selecciona el código fuente de la DB.\newline
		\textbf{2.2} Muestra el código fuente y varias opciones, entre ellas, el link download.\\
		\hline
		\textbf{3.} Da click en el link download. & \textbf{4.} El sistema muestra el código fuente en texto plano, para ser descargado.\\
		\hline
		\multicolumn{2}{|c|}{} \\
		\hline
		Actor: \textbf{team} & Referencia: 9.1 \\ 
		\hline
		Precondición: Referencia 7.1; existe la solución. & Postcondición: El sistema muestra un archivo de texto plano para ser descargado.\\
		\hline
		\textbf{Acción de los actores} & \textbf{Respuesta del sistema} \\
		\hline
		\textbf{1.} Selecciona la solución de interés. & \textbf{2.1} Selecciona el código fuente de la DB.\newline
		\textbf{2.2} Muestra el código fuente y varias opciones, entre ellas, el link download.\\
		\hline
		\textbf{3.} Da click en el link download. & \textbf{4.} El sistema muestra el código fuente en texto plano, para ser descargado.\\
		\hline
		\end{tabular}
		\end{center}
		\end{table}

		\begin{table}[p!]
		\caption{Caso de uso 10: Visualizar Postmaratones pasadas}
		\label{tb:caso9}
		\begin{center}
		\begin{tabular}{|p{5.5cm}|p{5.5cm}|}
		\hline
		\cellcolor[gray]{0.8}Caso de uso &\cellcolor[gray]{0.8}Visualizar Postmaratones pasadas.\\
		\hline
		Actor: \textbf{admin} & Referencia: 10 \\ 
		\hline
		Precondición: administrador logueado correctamente. & Postcondición: El sistema muestra detalles de Postmaratones pasadas.\\
		\hline
		\textbf{Acción de los actores} & \textbf{Respuesta del sistema} \\
		\hline
		\textbf{1.} Accede al menú History\_post. & \textbf{2.1} Selecciona de la DB, Postmaratones finalizadas.\newline
		\textbf{2.2} Lista las Postmaratones devueltas por la consulta.\\
		\hline
		\textbf{3.} Selecciona la Postmaratón de interés. & \textbf{4.} Lista enunciados, código fuente, autores y comentarios referentes a los problemas de la Postmaratón seleccionada.\\
		\hline
		\multicolumn{2}{|c|}{} \\
		\hline
		Actor: \textbf{team} & Referencia: 10.1 \\ 
		\hline
		Precondición: team logueado correctamente. & Postcondición: El sistema muestra detalles de Postmaratones pasadas.\\
		\hline
		\textbf{Acción de los actores} & \textbf{Respuesta del sistema} \\
		\hline
		\textbf{1.} Accede al menú History\_post. & \textbf{2.1} Selecciona de la DB, Postmaratones finalizadas.\newline
		\textbf{2.2} Lista las Postmaratones devueltas por la consulta.\\
		\hline
		\textbf{3.} Selecciona la Postmaratón de interés. & \textbf{4.} Lista enunciados, código fuente, autores y comentarios referentes a los problemas de la Postmaratón seleccionada.\\
		\hline
		\end{tabular}
		\end{center}
		\end{table}
	
		\begin{table}[H]
		\caption{Caso de uso 11: Someter solución en Postmaratón pasada}
		\label{tb:caso10}
		\begin{center}
		\begin{tabular}{|p{7cm}|p{7cm}|}
		\hline
		\cellcolor[gray]{0.8}Caso de uso & \cellcolor[gray]{0.8}Someter solución en Postmaratón pasada \\
		\hline
		Actor: \textbf{team} & Referencia: 11 \\ 
		\hline
		Precondición: Referencia 10.1; el team no registra como autor en las soluciones existentes del problema a someter. & Postcondición: El sistema indica el resultado del sometimiento.\\
		\hline
		\textbf{Acción de los actores} & \textbf{Respuesta del sistema} \\
		\hline
		\textbf{1.} Accede a la opción add source del problema elegido. & \textbf{2.1} Selecciona de la DB, los testcases de entrada correspondientes al problema.\newline
		\textbf{2.2} Muestra un formulario con campos para: descargar los testcases que publica y subir las salidas del programa.\\
		\hline
		\textbf{3.} Descarga los testcases de entrada.  & \textbf{4.} Inicia y muestra el conteo del cronómetro, indicando el tiempo límite para el sometimiento.\\
		\hline
		\textbf{5.} Ejecuta en su máquina el algoritmo con los testcases descargados.  & \textbf{6.} Continua el conteo del cronómetro.\\
		\hline
		\textbf{7.} Sube el o los resultados del programa. & \textbf{8.1} Valida sometimiento.\newline
		\textbf{8.2} Muestra un mensaje de respuesta del sometimiento.\\
		\hline
		\end{tabular}
		\end{center}
		\end{table}

		\begin{table}[H]
		\caption{Caso de uso 12: Adicionar comentario en Postmaratones pasadas}
		\label{tb:caso12}
		\begin{center}
		\begin{tabular}{|p{7cm}|p{7cm}|}
		\hline
		\cellcolor[gray]{0.8}Caso de uso & \cellcolor[gray]{0.8}Adicionar comentario en Postmaratones pasadas \\
		\hline
		Actor: \textbf{team} & Referencia: 12 \\ 
		\hline
		Precondición: Referencia 10.1 & Postcondición: El sistema publica el nuevo comentario.\\
		\hline
		\textbf{Acción de los actores} & \textbf{Respuesta del sistema} \\
		\hline
		\textbf{1.} Accede al problema de interés. & \textbf{2.1} Selecciona soluciones y autores del problema en la DB.\newline
		\textbf{2.2} Muestra soluciones y teams autores del problema.\\
		\hline
		 \textbf{2} Selecciona la solución a comentar. & \textbf{3.1} Selecciona el código fuente de la DB.\newline
		\textbf{3.2} Muestra el código fuente de la solución y la opción de adicionar comentario.\\
		\hline
		\textbf{4.} Edita el comentario en el campo de texto y lo publica.  & \textbf{5.1} Valida la publicación del comentario.\newline
		\textbf{5.2} Guarda el comentario en la DB.\newline
		\textbf{5.3} Regresa a la página del código fuente y sus respectivos comentarios.\\
		\hline
		\multicolumn{2}{|c|}{\textbf{Cursos Alternos}} \\
		\hline
		\textbf{5.1} Validación incorrecta. & Muestra el mensaje de error respectivo.\\
		\hline
		\end{tabular}
		\end{center}
		\end{table}

		\begin{table}[H]
		\caption{Caso de uso 13: Descargar código fuente de Postmaratón pasada}
		\label{tb:caso13}
		\begin{center}
		\begin{tabular}{|p{7cm}|p{7cm}|}
		\hline
		\cellcolor[gray]{0.8}Caso de uso & \cellcolor[gray]{0.8}Descargar código fuente de Postmaratón pasada.\\
		\hline
		Actor: \textbf{admin} & Referencia: 13 \\ 
		\hline
		Precondición: Referencia 10.1 & Postcondición: El sistema muestra un archivo de texto plano para ser descargado.\\
		\hline
		\textbf{Acción de los actores} & \textbf{Respuesta del sistema} \\
		\hline
		\textbf{1.} Selecciona la solución de interés. & \textbf{2.1} Selecciona el código fuente de la DB.\newline
		\textbf{2.2} Muestra el código fuente y varias opciones, entre ellas, el link download.\\
		\hline
		\textbf{3.} Da click en el link download. & \textbf{4.} El sistema muestra el código fuente en texto plano, para ser descargado.\\
		\hline
		\textbf{5.} Guarda el archivo.\\
		\hline
		\multicolumn{2}{|c|}{} \\
		\hline
		Actor: \textbf{team} & Referencia: 13.1 \\ 
		\hline
		Precondición: Referencia 10.1 & Postcondición: El sistema muestra un archivo de texto plano para ser descargado.\\
		\hline
		\textbf{Acción de los actores} & \textbf{Respuesta del sistema} \\
		\hline
		\textbf{1.} Selecciona la solución de interés. & \textbf{2.1} Selecciona el código fuente de la DB.\newline
		\textbf{2.2} Muestra el código fuente y varias opciones, entre ellas, el link download.\\
		\hline
		\end{tabular}
		\end{center}
		\end{table}		
		\vspace{1.0cm}
		
\section{DISEÑO PARA ADAPTAR EL JUEZ ELEGIDO COMO \\
HERRAMIENTA DE ESTUDIO}

Una vez culminada la etapa de análisis, se cuenta con el bagaje suficiente para elaborar el diseño de adaptación para la herramienta de estudio. 

\subsection{IDENTIFICACIÓN DE ACTORES}
Partiendo del análisis realizado en el la sección \ref{casos_uso}, se identifica que las nuevas  funcionalidades afectan directamente los actores admin, jury y team.
En el caso de team, es necesario crear una categoría para las postmaratones, categoría que será llamada Post.

		\begin{figure}[H]	
		\caption{Actores}
		\label{fig:actores}
		\begin{center}
		\fbox{\includegraphics[width=6cm]{imagenes/diagramas/actores.png}}
		\end{center}		
		\end{figure}

\subsection{DIAGRAMA DE CASOS DE USO}
Un componente del diseño para la solución es el diagrama de casos de uso, se ilustrado continuación:

		\begin{figure}[H]	
		\caption{Diagrama de casos de uso}
		\label{fig:dia_casos}
		\begin{center}
		\includegraphics[width=13cm]{imagenes/diagramas/diag_casos.png}
		\end{center}		
		\end{figure}
		
\subsection{DIAGRAMAS DE SECUENCIA}

		\begin{figure}[H]	
		\caption{Diag sec 1: Crear External Contest}
		\label{fig:sec1}
		\begin{center}
		\fbox{\includegraphics[width=13cm]{imagenes/diagramas/sec1.png}}
		\end{center}		
		\end{figure}

		\begin{figure}[H]	
		\caption{Diag sec 2: Crear Internal Contest}
		\label{fig:sec2}
		\begin{center}
		\fbox{\includegraphics[width=13cm]{imagenes/diagramas/sec2.png}}
		\end{center}		
		\end{figure}	

		\begin{figure}[H]	
		\caption{Diag sec 3: Crear Postmaratón}
		\label{fig:sec3}
		\begin{center}
		\fbox{\includegraphics[width=14cm]{imagenes/diagramas/sec3.png}}
		\end{center}		
		\end{figure}	

		\begin{figure}[H]	
		\caption{Diag sec 4: Habilitar/Deshabilitar team externo}
		\label{fig:sec4}
		\begin{center}
		\fbox{\includegraphics[width=14cm]{imagenes/diagramas/sec4.png}}
		\end{center}		
		\end{figure}

		\begin{figure}[H]	
		\caption{Diag sec 5: Subir enunciado del problema}
		\label{fig:sec5}
		\begin{center}
		\fbox{\includegraphics[width=14cm]{imagenes/diagramas/sec5.png}}
		\end{center}		
		\end{figure}

		\begin{figure}[H]	
		\caption{Diag sec 6.1: Ver enunciado del problema (admin)}
		\label{fig:sec6_1}
		\begin{center}
		\fbox{\includegraphics[width=14cm]{imagenes/diagramas/sec6_1.png}}
		\end{center}		
		\end{figure}
	
		\begin{figure}[H]	
		\caption{Diag sec 6.2: Ver enunciado del problema (team)}
		\label{fig:sec6_1}
		\begin{center}
		\fbox{\includegraphics[width=14cm]{imagenes/diagramas/sec6_2.png}}
		\end{center}		
		\end{figure}

		\begin{figure}[H]	
		\caption{Diag sec 7.1: Visualizar actual Postmaratón (admin)}
		\label{fig:sec7_1}
		\begin{center}
		\fbox{\includegraphics[width=14cm]{imagenes/diagramas/sec7_1.png}}
		\end{center}		
		\end{figure}

		\begin{figure}[H]	
		\caption{Diag sec 7.2: Visualizar actual Postmaratón (team)}
		\label{fig:sec7_2}
		\begin{center}
		\fbox{\includegraphics[width=14cm]{imagenes/diagramas/sec7_2.png}}
		\end{center}		
		\end{figure}

		\begin{figure}[H]	
		\caption{Diag sec 8: Adicionar comentario durante  actual Postmaratón}
		\label{fig:sec8}
		\begin{center}
		\fbox{\includegraphics[width=14cm]{imagenes/diagramas/sec8.png}}
		\end{center}		
		\end{figure}	

		\begin{figure}[H]	
		\caption{Diag sec 9.1: Descargar código fuente durante actual Postmaratón (admin)}
		\label{fig:sec9_1}
		\begin{center}
		\fbox{\includegraphics[width=13cm]{imagenes/diagramas/sec9_1.png}}
		\end{center}		
		\end{figure}

		\begin{figure}[H]	
		\caption{Diag sec 9.2: Descargar código fuente durante actual Postmaratón (team)}
		\label{fig:sec9_2}
		\begin{center}
		\fbox{\includegraphics[width=13cm]{imagenes/diagramas/sec9_2.png}}
		\end{center}		
		\end{figure}

		\begin{figure}[H]	
		\caption{Diag sec 10.1: Visualizar Postmaratones pasadas (admin)}
		\label{fig:sec10_1}
		\begin{center}
		\fbox{\includegraphics[width=14cm]{imagenes/diagramas/sec10_1.png}}
		\end{center}		
		\end{figure}

		\begin{figure}[H]	
		\caption{Diag sec 10.2: Visualizar Postmaratones pasadas (team)}
		\label{fig:sec10_2}
		\begin{center}
		\fbox{\includegraphics[width=14cm]{imagenes/diagramas/sec10_2.png}}
		\end{center}		
		\end{figure}
	
		\begin{figure}[H]	
		\caption{Diag sec 11: Someter solución en Postmaratón pasada}
		\label{fig:sec11}
		\begin{center}
		\fbox{\includegraphics[width=13cm]{imagenes/diagramas/sec11.png}}
		\end{center}		
		\end{figure}

		\begin{figure}[H]	
		\caption{Diag sec 12: Adicionar comentario en Postmaratones pasadas}
		\label{fig:sec12}
		\begin{center}
		\fbox{\includegraphics[width=13cm]{imagenes/diagramas/sec12.png}}
		\end{center}		
		\end{figure}
		
		\begin{figure}[H]	
		\caption{Diag sec 13.1: Descargar código fuente de Postmaratón pasada (admin) }
		\label{fig:sec13_1}
		\begin{center}
		\fbox{\includegraphics[width=13cm]{imagenes/diagramas/sec13_1.png}}
		\end{center}		
		\end{figure}
		
		\begin{figure}[H]	
		\caption{Diag sec 13.2: Descargar código fuente de Postmaratón pasada (team)}
		\label{fig:sec13_2}
		\begin{center}
		\fbox{\includegraphics[width=13cm]{imagenes/diagramas/sec13_2.png}}
		\end{center}		
		\end{figure}		

\subsection{MODELO ENTIDAD RELACIÓN}
Como parte del diseño para la adaptación del sistema de juzgamiento en una herramienta de estudio, se planean las modificaciones necesarias en la base de datos domjudge [\ref{fig:er_domjud}] y se diseña el modelo ER para una segunda base de datos.

\subsubsection{MODIFICACIONES: BASE DE DATOS  domjudge}\label{mod_db_dom}
Las modificaciones pertinentes para la DB DOMjudge, son básicamente adición de campos en las entidades existentes y la agregación de una nueva entidad, por consiguiente la estructura fundamental del modelo ER se mantiene.

	\begin{itemize}
	\item En la entidad \textbf{contest} anteriormente descrita en \ref{fig:contest}, se adicionan los campos \textbf{post} e \textbf{inner}, mediante los cuales se puede clasificar un contest, tal como se observa en la tabla \ref{tb:tip_contest}.

		\begin{table}[H]
		\caption{Tipos de Contest}
		\label{tb:tip_contest}
		\begin{center}
		\begin{tabular}{|l|c|c|}
		\hline
		\textbf{Tipo de Contest} & \textbf{post} & \textbf{inner}\\
		\hline
		External Contest & 0 & 0\\
		\hline
		Internal Contest & 0 & 1\\
		\hline
		Postmaratón & 1 & 0\\
		\hline
		\end{tabular}
		\end{center}
		\end{table}

	\item A la entidad \textbf{team}, descrita en \ref{fig:team}, se adiciona el campo \textbf{enable} para habilitar y deshabilitar los teams\footnote{Permite controlar la participación de teams externos, es decir, aquellos que posean una afiliación diferente a UTP, puesto que los teams internos(con afiliación UTP) serán habilitados por defecto.} a participar en determinado contest.

	\item Para crear la categoría Post de teams, se inserta una nueva fila en la entidad \textbf{team\_category}.

	\item En la entidad \textbf{team\_affiliation}, se inserta una nueva fila con los atributos necesarios para crear la afiliación UTP.

	\item Finalmente, se crea la entidad \textbf{set\_problems} para almacenar archivos pdf correspondientes al enunciado de cada problema. A continuación se específica su estructura:

	\begin{figure}[H]	
	\caption{Entidad set\_problems}
	\label{fig:enti_set_problems}
	\begin{center}
	\includegraphics[width=4cm]{imagenes/set_problems.png}
	\end{center}		
	\end{figure}

	\end{itemize}

\subsubsection{BASE DE DATOS ADICIONAL: domjudge2}
Se crea una segunda DB con la finalidad de almacenar información de las Postmaratones, de las cuales se deben generar históricos.\\

DB domjuge2 se compone de tablas espejo y entidades adicionales. En las últimas, se almacenen datos requeridos por las nuevas funcionalidades.\\

Tablas espejo son entidades existentes en DB domjudge, de tal manera que al ejecutar una  inserción o actualización, se guarde tanto en DB domjudge como en la respectiva tabla espejo de domjudge2. Esto con el fin de garantizar la persistencia de datos, indispensables para construir los históricos.

	\begin{figure}[H]	
	\caption{Diagrama ER: domjudge2}
	\label{fig:domjudge_2}
	\begin{center}
	\fbox{\includegraphics[width=15cm]{imagenes/ERdomjudge2.png}}
	\end{center}		
	\end{figure}	

Tal como se evidencia en la figura \ref{fig:domjudge_2}, las entidades espejo son: \textbf{team}, \textbf{team\_category}, \textbf{team\_affiliation}, \textbf{problem}, \textbf{testcase}, \textbf{set\_problems}, \textbf{contest} y \textbf{language}.\\

Por otro lado, las entidades adicionales son:
	\begin{itemize}
	\item\textbf{solution\_sc}: destinada para almacenar código fuente de soluciones correctas, sometidas durante y después de Postmaratones.
	
	\begin{figure}[H]	
	\caption{Entidad solution\_sc}
	\label{fig:enti_solution_sc}
	\begin{center}
	\includegraphics[width=4cm]{imagenes/solution_sc.png}
	\end{center}		
	\end{figure}

	\item\textbf{comments}: aloja comentarios publicados a las soluciones existentes.

	\begin{figure}[H]	
	\caption{Entidad comments}
	\label{fig:enti_comments}
	\begin{center}
	\includegraphics[width=3cm]{imagenes/comments.png}
	\end{center}		
	\end{figure}

	\item\textbf{sub\_tempo}: almacena temporalmente, el tiempo en que el team inicia la descarga de los casos de prueba  y el tiempo en que sube la salida del programa.

	\begin{figure}[H]	
	\caption{Entidad comments}
	\label{fig:enti_comments}
	\begin{center}
	\includegraphics[width=3cm]{imagenes/sub_tempo.png}
	\end{center}		
	\end{figure}
		
	\end{itemize}

\subsection{CAMBIOS Y ADICIONES EN EL CÓDIGO FUENTE}
En base a los casos de uso y diagramas de secuencia, se analizan los cambios y modificaciones necesarias para cumplir con los requerimientos establecidos.\\

Una vez se tiene claro el funcionamiento del sistema de juzgamiento, los requerimientos a cumplir y el diseño, se procede a realizar los cambios y adiciones pertinentes al código fuente.\\
Para llevar un orden en la planeación de los cambios, se sigue la estructura de directorios de DOMjudge, explicada en \ref{estruc_dirs}. Adicionalmente, se define el color de fondo blanco para módulos, directorios y archivos, como el indicador de código modificado, si estos se encuentran agrupados por líneas discontinuas, significa que el el módulo, directorio o archivo es nuevo.\\


En lo que respecta al módulo \textbf{domserver} los directorios implicados en esta etapa son: lib, sql y www; por su parte, el \textbf{judgehost} sólo requiere cambios en el directorio lib.\\

\subsubsection{domserver: MODIFICACIONES/ADICIONES}

\textbf{Directorio sql}\\
Los nuevos scripts necesarios para el directorio sql, se explican a continuación:
	
	\begin{itemize}

	\item\textbf{changes\_db\_structure}: especifica las modificaciones para la base de datos domjudge, establecidas en \ref{mod_db_dom}.

	\item\textbf{changes\_db\_privileges.slq}: modificación de privilegios para DB domjudge.

	item\textbf{bash dj-setup-database-domjudge2}: script bash encargado de crear la segunda base de datos: domjudge2. Llama los scripts \textbf{db\_domjudge2\_structure.sql},\textbf{ privilegios\_domjudge2.sql}, \textbf{db\_domjudge2\_example.sql} y \textbf{dbpasswords}.

	\item\textbf{db\_domjudge2\_structure.sql}: implementación de la estructura para DB domjudge2.

	\item\textbf{privilegios\_domjudge2.sql}: privilegios para domjudge2.

	\item\textbf{db\_domjudge2\_example.sql}: datos iniciales a insertar en domjudge2.

	\item\textbf{dbpasswords}: script bash, genera las claves de acceso para usuarios de domjudge2.\\

La figura \ref{fig:mod_sql} ilustra la forma de agrupar los scripts.

		\begin{figure}[H]	
		\caption{Modificaciones directorio sql}
		\label{fig:mod_sql}
		\begin{center}
		\fbox{\includegraphics[width=15cm]{imagenes/diagramas/new_dom_sql.png}}
		\end{center}		
		\end{figure}
	\end{itemize}
	
\textbf{Directorio lib}:\label{new_libs_db}

	\begin{itemize}
	\item\textbf{lib\_db1.php}: DOMjudge utiliza la \textbf{librería lib.database.php} para gestionar conexiones y consultas entre domserver y DB domjudge, sin embargo, no es aplicable para acceder a los campos anexados, en consecuencia, es pertinente implementar \textbf{lib\_db1.php} donde se definan nuevas funciones para dar inicio y fin a las conexiones con DB domjudge.

	\item\textbf{lib\_db2.php}: nuevo script para administrar las conexiones entre domserver y DB domjudge2.

	\item\textbf{new\_common.jury.php}: nuevo script que personaliza los likns adicionar, editar y borrar,  visibles para el usuario admin, es decir, muestra un mensaje acorde al tipo de contest: External, Internal o  Postmaratón, al que se aplique la acción.

	\item\textbf{new\_lib.php}: cúmulo de nuevas funciones para las extensiones de la interfaz web, consultas relacionadas con campos adicionados a DB domjuge y DB domjudge2. Hace uso de \textbf{lib\_db1.php} y \textbf{lib\_db2.php}.

A continuación se expone una forma adecuada de distribuir el código mencionado:

		\begin{figure}[H]	
		\caption{Modificaciones directorio lib}
		\label{fig:mod_lib}
		\begin{center}
		\fbox{\includegraphics[width=15cm]{imagenes/diagramas/new_dom_lib.png}}
		\end{center}		
		\end{figure}

	\end{itemize}

\textbf{Directorio www}:\\
Adaptar la interfaz web implica: validación de formularios, modificación y adición de scripts en subdirectorios jury y team.\\

Para validar datos se acude al lenguaje javascript, que ofrece librerías bastante útiles y fáciles de usar, más específicamente, se curre a librerías jquery: \\
\textbf{jquery-validation-1.9.0}, \textbf{jquery-latest.js} y \textbf{jquery.lwtCountdown-1.0.js}, tal como se evidencia en la figura \ref{fig:mod_www}.\\

		\begin{figure}[H]	
		\caption{Modificaciones directorio www}
		\label{fig:mod_www}
		\begin{center}
		\fbox{\includegraphics[width=6cm]{imagenes/diagramas/new_dom_www.png}}
		\end{center}		
		\end{figure}

En lo referente a la interfaz web del jury se requiere modificar:

	\begin{itemize}

	\item\textbf{init.php}: siendo el archivo pricipal, debe llamar las librerías de bases de datos(lib\_db1.php, lib\_db2.php), de interfaz web(new\_lib.php, new\_common.jury.php) e iniciar las nuevas conexiones.

	\item\textbf{menu.php}: adición de menús que enlazan con las nuevas funcionalidades.
	\item\textbf{contests.php}: pasa de listar contests a listar External Contests.
	\item\textbf{contest.php}: cambios para mostrar detalles de un determinado External Contest.
	\item\textbf{delete.php}: inclusión de código que permita: mensajes acordes al tipo de contest a borrar; actualización en DB domjudge2 para datos no requeridos como persistentes.
	\item\textbf{edit.php}: inclusión de código que permita: mensajes acordes al tipo de constest a editar; actualización en DB domjudge2 para tablas espejo.
	\item\textbf{problems.php}: adición de : funcionalidad para subir archivo pdf asociado a un problema, código para garantizar que los problemas queden asociados a un único contest.
	\item\textbf{problem.php}: código adicional que impida cambiar el contest asociado a un problema, una vez este finalice.
	\item\textbf{team.php}: adición de código para protección de atributos correspondientes a teams internos.
	\item\textbf{teams.php}: función para habilitar/deshabilitar teasm externos.
	\item\textbf{testcase.php}: función que actualice la inserción de testcases en DB domjudge2.
	\item\textbf{index.php}: adicionar links para acceder a los diferentes tipos de contests.

	\end{itemize}
\vspace{1.0cm}
Complementario a lo anterior es necesaria la implementación de los siguientes scripts:
	
	\begin{itemize}

	\item\textbf{inner\_contests.php}: lista Internal Contest finalizados o próximos a realizar, muestra opciones como adicionar, editar y borrar.

	\item\textbf{inner\_contest.php}: ilustra detalles de un determinado Internal Contest.

	\item\textbf{postmaratones.php}: lista Postmaratones finalizadas o próximas a realizar, muestra opciones como adicionar, editar y borrar.

	\item\textbf{postmaraton.php}: muestra detalles de una determinada Postmaratón.

	\item\textbf{guardar\_archivo.php}: script para gestionar la carga, cambio y eliminación de archivos pdf (enunciado del problema).

	\item\textbf{current\_post.php}: menú que se activa durante el transcurso de Postmaratones, muestra un listado con datos generales de la actual Postmaratón: nombre, pdf, cantidad de código fuente y comentarios disponibles del problema. Se comunica con \textbf{list\_source\_code.php} y \textbf{see\_Problem.php}.

	\item\textbf{list\_source\_code.php}: muestra listado de soluciones existentes de un problema, indicando team autor, hora de sometimiento lenguaje y número de comentarios. Se comunica con \textbf{see\_Problem.php}.

	\item\textbf{source\_code.php}: permite visualizar el código fuente y comentarios de terminada solución, incluye opción de descargar el código.

	\item\textbf{see\_Problem.php}: script encargado de mostrar el archivo pdf de un problema.

	\item\textbf{enable\_team.php}: especificaciones para habilitar/deshabilitar teams externos.

	\item\textbf{history\_post.php}: lista las Postmaratones desarrolladas en la herramienta y permite acceder a ellas. Se comunica con \textbf{see\_Problem.php} y \textbf{problems\_past.php}.

	\item\textbf{problems\_past.php}: muestra un listado con datos generales de una Postmaratón pasada: nombre, pdf, cantidad de código fuente y comentarios disponibles del problema. Llama a \textbf{list\_source\_code.php}.

	\end{itemize}

En la figura \ref{fig:new_dom_www_jury} se evidencia lo explicado.\\


Continuando con la adaptación de la interfaz web team como se ilustra en la figura \ref{fig:new_dom_www_team}, es pertinente modificar:

		\begin{itemize}

		\item\textbf{init.php}: debe incluir las librerías de bases de datos(lib\_db1.php, lib\_db2.php), de interfaz web(new\_lib.php, new\_common.jury.php) e iniciar las nuevas conexiones.

		\item\textbf{menu.php}: especificación de menús a habilitar de acuerdo al la categoría del team: Participants o Post.

		\item\textbf{websubmit.php}: definición de restricciones para someter problemas, de acuerdo al tipo de contest que se esté realizando y a la categoría del team logueado.

		\item\textbf{index.php}: código adicional para mostrar información de problemas y sometimientos, de acuerdo a la categoría del team logueado.
	
		\end{itemize}

Entre los nuevos scripts, se tiene: \\
\textbf{current\_post.php}, \textbf{history\_post.php}, \textbf{list\_source\_code.php}, \textbf{see\_Problem.php}, \textbf{problem\_past.php}, \textbf{see\_Problem.php}, \textbf{source\_code.php}; explicados anteriormente. Adicionalmente, son necesarios:

		\begin{itemize}

		\item\textbf{set\_problems.php}: muestra los problemas y enunciados para el actual contest, dependiendo del tipo de contest y la categoría del tema logueado. Se comunica con \textbf{see\_Problem.php}.
	
		\item\textbf{websubmit\_post.php}: gestiona todo lo relacionado al sometimiento de problemas pertenecientes a contest pasados, publica testcases de entrada y muetra el formulario respectivo para realizar el sometimiento. Incluye librerías jquery, se comunica con \textbf{time.php} y  \textbf{add\_scode.php}.
		
		\item\textbf{time.php}: inserciones en DB domjudge2 para la entidad sub\_time, para registrar el tiempo de inicio y finalización en el sometimiento de una solución después de una Postmaratón.
	
		\item\textbf{add\_comment.php}: muestra formulario para adicionar comentarios, valida los datos y gestiona su inserción en DB domjudge2. Utiliza librerías jquery.

		\item\textbf{add\_scode.php}: califica el sometimiento, de acuerdo a ello muestra mensajes para el team y gestiona la inserción del código en DB domjudge2.

		\item\textbf{show\_source.php}: muestra el código fuente de una solución en texto plano para ser descargado.

		\vspace{1.0cm}
		\begin{figure}[H]	
		\caption{Modificaciones, adiciones en www/jury}
		\label{fig:new_dom_www_jury}
		\begin{center}
		\fbox{\includegraphics[width=15cm]{imagenes/diagramas/new_dom_www_jury.png}}
		\end{center}		
		\end{figure}

		\begin{figure}[H]	
		\caption{Modificaciones, adiciones en www/team}
		\label{fig:new_dom_www_team}
		\begin{center}
		\fbox{\includegraphics[width=12cm]{imagenes/diagramas/new_dom_www_team.png}}
		\end{center}		
		\end{figure}

		\end{itemize}


\subsubsection{judgehost: MODIFICACIONES/ADICIONES}
En el módulo judgehost modificaciones y adiciones tienen lugar en el directorio \textbf{lib}:

	\begin{itemize}
	
	\item\textbf{lib\_db2.php}: nuevo scpript que gestiona conexiones y desconexiones entre el servidor judgedaemon y la DB domjudge2.

	\item\textbf{judgedaemon.main.php}: contiene el código que define el servidor judgedaemon, encargado de atender y juzgar los sometimientos. En este se requiere adicionar funciones que permitan identificar cuando un contest es de tipo Postmaratón, de modo que guarde automáticamente en DB domjudge2, código fuente de sometimientos correctos que se juzgen durante la Postmaratón. Hace uso de \textbf{lib\_db2.php}.\\

A continuación, se expone la ubicación de los scripts.

		\begin{figure}[H]	
		\caption{Modificaciones, adiciones en lib}
		\label{fig:new_jud_lib}
		\begin{center}
		\fbox{\includegraphics[width=13cm]{imagenes/diagramas/new_jud_lib.png}}
		\end{center}		
		\end{figure}

	\end{itemize}


\section{PRUEBAS DE LA HERRAMIENTA}

%incluir tablas de pruebas

Finalizada la adaptación, se debe testear que la herramienta actúe como es debido ante diferentes estímulos, para ello se  crean diferentes cuentas de prueba: teams internos con categoría Post, Participants y teams externos para que interactúen en contests tipo External, Internal y Postmaratón.\\
A Continuación se exponen las diferentes pruebas realizadas:\\
\input tabs_testcases.tex

Una vez se comprueba que efectivamente la herramienta hace lo que debe hacer, se pasa a etapa implantación.

\chapter{IMPLANTACIÓN, PUESTA A PUNTO Y PRUEBA PILOTO DE LA HERRAMIENTA}

\section{IMPLANTACIÓN Y PUESTA A PUNTO}\label{inst_tool}

La implantación de la herramienta se divide en dos etapas: instalación del sistema base e instalación de nuevos módulos.

\subsection{INSTALACIÓN DEL SISTEMA BASE: DOMjudge}\label{insta_basic}
	
\subsubsection{REQUERIMIENTOS}
La máquina que alojará el \textbf{domserver}[~\ref{def_hosts}] y el \textbf{judgehost}[~\ref{def_hosts}], debe tener las siguientes características:

	\begin{enumerate}

	\item\textbf{Requerimientos de Hardware}

		\begin{itemize}

		\item\textbf{Disco}: 100GB de espacio en disco\footnote{Debido a que la herramienta alojará una alta cantidad de información es importante garantizar un espacio apropiado para su almacenamiento.}.

		\item\textbf{Memoria}: 4GB de RAM\footnote{La parte del sistema de juzgamiento que más cantidad de memoria puede demandar es la máquina virtual de Java, en casos de prueba cercanos o superiores a 100MB.\\Lo ideal son 4GB de RAM, sin embargo con 2GB el sistema de juzgamiento funciona.}.\\

		\end{itemize}
	
	\item\textbf{Requerimientos del sistema operativo}

		\begin{itemize}

		\item\textbf{Sistema Operativo}: GNU/Linux\footnote{Las pruebas y modificaciones del presente trabajo se realizan utilizando el S.O  GNU/Linux, del cual se puede decir que es bastante adecuado para las necesidades del mismo, sin embargo, según la documentación oficial de DOMjugde, también es posible utilizar cualquier variante de Unix:$<$http://home.a-eskwadraat.nl/~domjudge/docs/admin-manual-2.html\#ss2.3$>$,[Consultado el 8 de Marzo de 2012].}.
	
		\item{\textbf{Distribución}: Debian GNU/Linux versión estable actual\footnote{La versión actual de Debian es la 6.0 denominada squeeze, puede ser obtenida desde la página oficial del proyecto: $<$http://www.debian.org/distrib/$>$}.}

		\item\textbf{Filesystem, esquema de particionado}:\\
Se deben proporcionar los siguientes tamaños de disco para los directorios especificados:\\
			\textbf{swap}: tamaño de RAM físico recomendado para instalaciones Linux.\\
			\textbf{/} : 10GB \\
			\textbf{/usr} : 8.4GB.\\ 
			\textbf{/tmp} : 378MB.\\
			\textbf{/var} : 61GB\footnote{Garantizar como mínimo la mitad de disco, esto debido a que la aplicación guardará una alta cantidad de información en la base de datos  y MySQL almacena sus DBs en /var/lib. }.\\
			\textbf{/opt} : 2GB.\\
El resto de espacio se distribuye en los demás directorios.

		\item\textbf{Permisos de acceso}: Privilegios de root.

		\item\textbf{Red}: Debe tener conexión TCP/IP con los \textbf{teams hosts}[~\ref{def_hosts}], de modo que se permita el tráfico HTTP.\\

		\end{itemize}

	\item\textbf{Requerimientos de software}
	
		\begin{enumerate}

		\item\textbf{Software requerido para ejecutar DOMjudge}

		Lenguajes de programación para el sistema de juzgamiento:

			\begin{itemize}
	
			\item Compilador de C: gcc
			
			\item Compilador de C++: g++
			
			\item\label{java_sun} Java: se recomienda instalar Java(Sun), más específicamente el paquete JDK\footnote{Java Development Kit(JDK) incluye al Java SE Runtime Environment(JRE) más el lenguaje y herramientas necesarias para implementar programas en java. Java SE Runtime Environment (JRE) contiene las librerías, componentes y la Java Virtual Machine, necesarias para ejecutar programas en java. \\ 
Es posible obtener más información en:$<$http://docs.oracle.com/javase/6/docs/$>$} que provee el lenguaje, la Máquina Virtual y todas las librerías necesarias para implementar y ejecutar los algoritmos desarrollados en java.\\	
		
			\end{itemize}
		
		Servicios:

			\begin{itemize}

			\item Servidor Web Apache con soporte para PHP $>$= 5.0.0 y extensiones de mysql para PHP.
			
			\item Servidor y cliente de base de datos Misal $>$= 4.1.x\\			
			
			\end{itemize}
		
		Otro software:

			\begin{itemize}

			\item PHP $>$= 5.0.0
	
			\item Bash $>$= 2
	
			\item glibc $>$= 2.1

			\item Apache htpasswd.

			\item LaTeX.\\
			
			\end{itemize}
	
		\item\textbf{Software requerido para instalar DOMjudge a partir del código fuente}

			\begin{itemize}

			\item Código fuente de DOMjudge versión 3.1.3\footnote{Descargable desde la web site oficial del proyecto: $<$http://domjudge.sourceforge.net/download/$>$}

			\item Compilador gcc y g++ con sus librerías estándar.

			\item GNU make.

			\item Librerías Boost regular expresión library y GNU Multiple Precision library.\\	

			\end{itemize}			

		\item\textbf{Software Adicional}

			\begin{itemize}

			\item phpMyAdmin, en lo posible versión: 4:3.3.10-1. Para chequear la base de datos cuando el administrador lo requiera.

			\item Librería php-geshi, permite resaltar el código fuente que el judge visualiza a través de la interfaz web.\\

			\end{itemize}			

		\end{enumerate}

	\item\textbf{Requerimientos para teams hosts}	

		\begin{itemize}

		\item Tener instalado el software necesario para implementar algoritmos en lenguajes aceptados por el sistema de sometimiento.

		\item Conexión TCP/IP con el domserver, navegador web con javascript activado, de modo que se pueda enviar las soluciones a sometimiento.
		
		\end{itemize}					

	\end{enumerate}

\subsubsection{PROCESO DE INSTALACIÓN} 

Consideraciones:

	\begin{itemize}

	\item El domserver[~\ref{def_hosts}] y el judgehost[~\ref{def_hosts}] serán instalados en el mismo servidor.

	\item Los pasos que se describen a continuación han sido ejecutados en un servidor perteneciente al programa de Ingeniería de Sistemas y Computación de la Universidad Tecnológica de Pereira, que será usado para llevar a cabo la prueba piloto[~\ref{prue_piloto}].

	\item Distribución Linux instalada en el servidor que alojará el sistema base: Debian GNU/Linux 6.0

	\item Versión a instalar de DOMjudge : 3.1.3
	
	\end{itemize}

Pasos para instalar el sistema base:

	\begin{enumerate}

	\item\textbf{Instalación del software requerido}:\\
A continuación se instala todo el software necesario, los paquetes que ya estén instalados serán omitidos o actualizados si es necesario:

\textbf{\small{\ttfamily{
ada@acm:\~\$ sudo apt-get install gcc g++ make libcurl4-gnutls-dev \textbackslash\\
mysql-server apache2 php5 php5-cli libapache2-mod-php5 php5-mysql \textbackslash\\
php-geshi ntp sudo procps sharutils xsltproc libboost-regex-dev \textbackslash\\
libgmp3-dev linuxdoc-tools transfig texlive-latex-recommended \textbackslash\\
phpmyadmin texlive-latex-extra sun-java6-jdk ghc fp-compiler}}}\\

	\item\textbf{Instalación de DOMjudge}:

		\begin{enumerate}

			\item Descomprimir el código fuente:\\
\textbf{\small{\ttfamily{ada@acm:\~\$ tar xzvf domjudge-3.1.3.tar.gz}}}\\
			
			\item Ejecutar el script \textbf{configure}, indicando la ruta destino para instalar el sistema:\\
\textbf{\small{\ttfamily{ada@acm:\~{}/domjudge-3.1.3\$ \\
./configure --prefix=/usr/local/domjudge}}}\\
			
			\item Construir e instalar el domserver:\\
\textbf{\small{\ttfamily{ada@acm:\~{}/domjudge-3.1.3\$ \\
make domserver \&\& sudo make install-domserver}}}\\

			\item Construir e instalar el judgehost:\\
\textbf{\small{\ttfamily{ada@acm:\~{}/domjudge-3.1.3\$ \\
make judgehost \&\&  sudo make install-judgehost}}}\\

			\item Construir e instalar la documentación que trae el sistema:\\
\textbf{\small{\ttfamily{ada@acm:\~{}/domjudge-3.1.3\$ \\
make docs \&\& sudo make install-docs}}}\\

		\end{enumerate}

Con las anteriores instrucciones se cuenta con el sistema de juzgamiento instalado, ahora se procede a realizar las configuraciones necesarias.\\

	\item\textbf{Configuración del domserver}

		\begin{enumerate}
	
		\item Ubicarse en el directorio del domserver:\\
\textbf{\small{\ttfamily{/usr/local/domjudge/domserver}}}\\

		\item Crear la base de datos para DOMjudge:\\
\textbf{\small{\ttfamily{
ada@acm:/usr/local/domjudge/domserver\$ \\
bin/dj-setup-database -u root -r install}}}\\

Donde se específica el usuario  \textbf{root} del servidor MySQL y la contraseña que es solicitada inmediatamente después aplicar el comando.\\

%\textbf{Fine tuning settings ************************************ \\
%http://localhost/domjudge/jury/doc/admin/admin-manual-2.html\#ss2.4}:\\

		\item Asignar permisos para el servidor web:\label{bits_especiales}\\

DOMjudge utiliza los permisos especiales \textbf{setuid} y \textbf{setgid} para su estructura de archivos y la ejecución de sus daemons.\\
El bit \textbf{setuid}, permite que el proceso resultante de la ejecución se identifique con el \textbf{uid} del usuario \textbf{own} del archivo.\\
El bit \textbf{setgid}, permite que el proceso resultante de la ejecución se identifique con el \textbf{gid} del \textbf{group}, al cual corresponde el archivo.\\
Por definición, estos privilegios están asociados con el permiso básico de ejecución(x).\\
La letra \textbf{s} (minúscula) indica que el permiso especial(setuid o setgid) está activado, mientras que la \textbf{S} (mayúscula) indica que está deshabilitado.\\

Los directorios \textbf{etc}, \textbf{lib}, \textbf{submissions}, \textbf{tmp} y \textbf{www} deben pertenecer al grupo del servidor web: \textbf{www-data} y tener los siguientes permisos para dicho grupo(teniendo en cuenta la aclaración previa):\\
\textbf{etc}, \textbf{lib}, y \textbf{www}: lectura y ejecución \textbf{(rs)}.\\
\textbf{submissions} y \textbf{tmp}: lectura, escritura y ejecución \textbf{(rws)}.\\
En lo que respecta al directorio \textbf{etc}, se debe tener especial cuidado con los permisos que se asignan a los ficheros \textbf{\small{\ttfamily{dbpasswords.secret}}} y \textbf{\small{\ttfamily{htpasswd-*}}} sólo deben tener permisos para el dueño y el grupo.\\\\

Los permisos y \textbf{grupos} en los directorios mencionados deben lucir como:\\
\begin{lstlisting}
drwxr-sr-x   root  staff      bin
drwxr-sr-x   root  www-data   etc
drwxr-sr-x   root  www-data   lib
drwx--S---   ada   staff      log
drwxr-sr-x   root  staff      sql
drwxrws---   ada   www-data   submissions
drwxrws---   ada   www-data   tmp
drwxr-sr-x   root  www-data   www
\end{lstlisting}
\vspace{0.5cm}

Los permisos, propietarios y grupos en los ficheros del directorio \textbf{etc} deben parecerse a:\\
\begin{lstlisting}
-rw-r--r--  root  root      apache.conf
-rw-r--r--  root  root      common-config.php
-rw-r-----  root  www-data  dbpasswords.secret
-rw-r--r--  root  www-data  domserver-config.php
-rw-r--r--  root  root      domserver-static.php
-rwxr-xr-x  root  root      gendbpasswords
-rw-r-----  root  www-data  htpasswd-jury
\end{lstlisting}
\vspace{0.5cm}

Nota: el userid  \textbf{ada} corresponde al usuario que ha instalado domjudge y que por consiguiente ha sido especificado como el DOMJUDGE\_USER, esto corresponde a la opción por default del script \textbf{configure} cuando no se específica un usuario.\\\\
Si se necesita cambiar el grupo y/o permisos de los directorios y ficheros que se han mencionado en este apartado, basta con aplicar los siguientes comandos:\\
\textbf{\small{\ttfamily{sudo  chgrp  www-data dir\\
sudo  chmod  permisos dir}}}\\
Según sea el caso.\\

		\item Definir tipo de autenticación web para teams:\\\\
IPADDRESS, PHP\_SESSIONS Y FIXED, son los métodos que DOMjudge permite para la autenticación de teams.
Cabe mencionar que el FIXED logea automáticamente, careciendo de toda seguridad y debería ser usado, si es que se llega usar, para demostración de contests.\\
En la presente configuración, se elige el método PHP\_SESSIONS.\\
Los métodos se encuentran en el archivo: \textbf{\small{\ttfamily{etc/domserver-config.php}}}, es suficiente con comentar y descomentar las líneas que los describen.\\

		\item Habilitar el HTTPS:\\\\
Debido a que se está utilizando HTTP para la autenticación web, es altamente recomendable configurar el protocolo HTTPS en el \textbf{\small{\ttfamily{etc/apache.conf}}}.\\
%**************************\\

		\item Definir usuarios para la interfaz web del jury:\\\\
Durante el proceso de instalación, DOMjudge crea el usuario \textbf{domjudge\_jury} y lo guarda en: 
\textbf{\small{\ttfamily{etc/htpasswd-jury}}}. Dicho usuario trae privilegios para los roles \textbf{jury} y \textbf{admin}, sin embargo, se recomienda adicionar nuevos usuarios de modo que los roles queden divididos y se tenga un mayor control del sistema.\\

Ante esto, se adicionan los usuarios \textbf{jury}, \textbf{admin} al archivo \textbf{\small{\ttfamily{htpasswd-jury}}} y se especifica el password para cada uno:\\
\textbf{\small{\ttfamily{
ada@acm:/usr/local/domjudge/domserver/etc\$\\
 sudo htpasswd htpasswd-jury jury\\
sudo htpasswd htpasswd-jury admin}}}\\

Luego en \textbf{\small{\ttfamily{etc/domserver-config.php}}}, se especifica el usuario con rol de \textbf{admin}, así:\\
\textbf{\small{\ttfamily{\$DOMJUDGE\_ADMINS = array(`admin', `admin');}}}\\\\
Nota:\\
Para borrar usuarios:\\
\textbf{\small{\ttfamily{sudo htpasswd -D htpasswd-jury user}}}\\\\
Para Modificar el password de un usuario:\\
\textbf{\small{\ttfamily{sudo htpasswd htpasswd-jury user}}}\\\\

		\item Linkear las configuraciones del servidor web para DOMjudge con el servidor web de la máquina que lo está alojando:\\

\textbf{\small{\ttfamily{
sudo ln -s /usr/local/domjudge/domserver/etc/apache.conf\textbackslash\\
/etc/apache2/conf.d/domjudge.conf  \&\& sudo apache2ctl graceful}}}\\

En este punto ya se debe tener acceso web a las interfaces jury y team.\\

		\item Configuraciones Adicionales\\\\
\emph{\textbf{Subir testcases con tallas demasiado altas}}.\\
Cuando un problema posee  testcases con tallas demasiado altas, es necesario modificar el valor por default de algunas variables del servidor web apache y el servidor de bases de datos MySQL, de tal manera que el admin pueda subir los testcases a la db.

Un indicio de que se esté presentando dicha situación, son errores como:\\
\textbf{\small{\ttfamily{The uploaded file is too large (exceeds the upload\_max\_filesize\\
 directive).\\
*Fatal error*: Allowed memory size of XX bytes exhausted (tried \\
to allocate YY bytes) in \\
*/home/domjudge/system/lib/lib.database.php*\\
on line *154*\\}}}

Esto se soluciona modificando:\\

En el archivo \textbf{\small{\ttfamily{/etc/php5/apache2/php.ini}}} las variables:\\

\textbf{upload\_max\_filesize}, define la talla máxima con la que se puede subir un archivo, tiene un valor por defecto de 2M.\\

\textbf{post\_max\_size}, define el tamaño limite aceptado por php para el envío de datos mediante el método POST, su valor suele estar definido en 8M. Para permitir la subida de archivos grandes, debe tener un valor mayor que upload\_max\_filesize.\\

\textbf{memory\_limit}, indica la cantidad de memoría que un script php puede consumir, por default es de 128M.\\

\textbf{max\_execution\_time} = 30(en algunos casos), en la que se especifica el tiempo máximo en segundos durante el cual puede ejecutarse un script php.\\

Una vez sean modificadas dichas variables, de acuerdo a los valores requeridos, se debe reiniciar el servidor apache, basta con ejecutar el siguiente comando:\\
\textbf{\small{\ttfamily{/etc/init.d/apache2 restart}}}\\


En el archivo \textbf{\small{\ttfamily{/etc/mysql/my.cnf la variable:}}}\\

\textbf{max\_allowed\_packet}, define el tamaño máximo que debe presentar un paquete que bien es recibido o enviado por el servidor mysql para una determinada consulta. Por defecto tiene un valor de 16M, si un archivo que va ser insertado o descargado de la db, sobrepasa tal valor, es necesario aumentar la talla, para la actual versión de mysql el valor máximo es de 1G.\\
Se debe reiniciar el servidor msql, una vez se haya modificado el archivo, de la siguiente manera:\\
\textbf{\small{\ttfamily{/etc/init.d/mysql restart}}}\\\\

En el caso de los teams, cuando \textbf{se sobrepasa el límite de tamaño para subir archivos}, los cambios se hacen directamente en la variable SOURCESIZE, definida en el archivo:\\
\textbf{\small{\ttfamily{domjudge/domserver/etc/commom-config.php}}}, ello permite que los scripts php para la interfaz team, ejecuten los valores de php.ini de acuerdo al valor que tiene establecido\\\\

\emph{\textbf{Hora, fecha incorrecta interfaz web}}.\\
En ocasiones, la hora mostrada a través de la interfaz web no está sincronizada con la hora del servidor que aloja el domserver, tal error se corrige adicionando la zona horaria en el archivo \textbf{\small{\ttfamily{/etc/php5/apache2/php.ini}}}, en la variable  \textbf{\small{\ttfamily{date.timezone}}}. \\

El fragmento de código, debe lucir como:
\begin{lstlisting} 
[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = America/Bogota
\end{lstlisting}

Después se reinicia el servicio apache con \textbf{\small{\ttfamily{/etc/init.p/apache2 restart}}}.\\\\
		\end{enumerate}

	\item\textbf{Configuración del judgehost}

		\begin{enumerate}

		\item Crear usuario encargado de ejecutar el \textbf{judgedaemon}[\ref{def_hosts}]\\

Se crea el usuario \textbf{domjudge-run} con privilegios mínimos para ejecutar el \textbf{judgedaemon}:\\
\textbf{\small{\ttfamily{useradd -d /nonexistent -g nogroup -s /bin/false domjudge-run}}}\\\\
	
		\item Verificar privilegios en \textbf{judgehost}[~\ref{def_hosts}]\\

\emph{\textbf{Activar bit setgid}}[\ref{bits_especiales}]\\
Aplicar los permisos 2755 para \textbf{bin} y para \textbf{tmp}; 2777 para \textbf{log} y para \textbf{judgings}.\\
El primer bit(2) habilita el permiso especial setgid, los otros tres corresponden a los permisos basicos del fichero:\\
\textbf{\small{\ttfamily{ada@acm:/usr/local/domjudge/judgehost\$ \\
sudo chmod 2755 -R bin/\\
sudo chmod 2755 -R tmp/\\
sudo chmod 2777 -R judgings/\\
sudo chmod 2777 -R log/}}}\\

\emph{\textbf{Activar bit setuid}}[\ref{bits_especiales}]\\
Es necesario habilitar el bit setuid para el ejecutable \textbf{runguard}:\\
\textbf{\small{\ttfamily{ada@acm:/usr/local/domjudge/judgehost/bin\$ \\
sudo chmod 4777 runguard}}}\\

Los directorios deben lucir como:
\begin{lstlisting} 
drwxr-sr-x  root staff  bin
drwxr-sr-x  root staff  etc
drwxrwsrwx  root staff  judgings
drwxrwsr-x  root staff  lib
drwxrwsrwx  root staff  log
drwxr-sr-x  root staff  tmp
\end{lstlisting}
\vspace{1cm}

El fichero runguard, debe tener los siguientes permisos:
\begin{lstlisting} 
-rwsrwxrw  root staff  runguard
\end{lstlisting}
\vspace{0.5cm}
		\item Habilitar el judgehost\\

En la base de datos del sistema existe un  registro de los \textbf{judgehosts} permitidos para juzgar los algoritmos, es posible chequear el listado a través de la interfaz web para el admin/jury. Si el nombre de la máquina no aparezca, sencillamente se adiciona.\\

		\item Correr el judgedaemon\\

Finalmente, para ejecutar el juez:\\
\textbf{\small{\ttfamily{
ada@acm:/usr/local/domjudge/judgehost/bin\\
./runguard ./judgedaemon}}}\\

Por motivos de seguridad, no puede ser ejecutado como root.\\

		\item Configuraciones adicionales\\

\emph{\textbf{Posibles inconvenientes al ejecutar el judgedaemon}}.\\
Si después de ejecutar el judgedaemon, sale el siguiente error:
\begin{lstlisting}
PHP Fatal error:  Uncaught exception 'RuntimeException' 
with message 
'SQL syntax-error, Error#1115: Unknown character set: 
'DJ_CHARACTER_SET_MYSQL',
 query: 'SET NAMES "DJ_CHARACTER_SET_MYSQL"'' 
in /usr/local/domjudge/judgehost/lib/lib.database.php:363
\end{lstlisting}
La solución es descomentar las líneas en que se define DJ\_CHARACTER\_SET y DJ\_CHARACTER\_SET\_MYSQL en el archivo:\\
\textbf{\small{\ttfamily{/usr/local/domjudge/judgehost/etc/judgehost-config.php}}}, de tal manera que luzca como el siguiente fragmento de código:
\begin{lstlisting}
///try adding next lines for solve problem judgedaemon
///when I try to start judgedaemon this return Fatal error
///info source sourceforge foroum 
///its solve the problem :)
define('DJ_CHARACTER_SET', 'utf-8');
define('DJ_CHARACTER_SET_MYSQL', 'utf8');
\end{lstlisting}
Por lo general, este código  viene comentado pero si no aparece basta con adicionarlo.\\

\emph{\textbf{Posibles inconvenientes con java}}.\\
Al inicio de la instalación del sistema, se recomendó instalar el JDK de Sun[\ref{java_sun}], pues bien, es necesario asegurase que esté se encuentre activo.\\

Para conocer qué versión de java y javac(Java programming language compiler) se está utilizando:\\
\begin{lstlisting}
ada@acm:~$ java -version
java version "1.6.0_18"
OpenJDK Runtime Environment (IcedTea6 1.8) (6b18-1.8-1)
OpenJDK Client VM (build 14.0-b16, mixed mode, sharing) 
ada@acm:~$ javac -version
javac 1.6.0_24
\end{lstlisting} 
Tal resultado indica que se está utilizando el openjdk, sin embargo, se pretende utilizar el sun-jdk, para ello se ejecutan los siguientes pasos:\\

\textbf{Listar las alternativas:}
\begin{lstlisting}
ada@acm:~$ sudo  update-java-alternatives -l
java-6-openjdk 1061 /usr/lib/jvm/java-6-openjdk
java-6-sun 63 /usr/lib/jvm/java-6-sun
\end{lstlisting}
Como se puede apreciar aparece el jdk que se instalo al principio del proceso, entonces \textbf{se debe activar:}\\
\begin{lstlisting}
ada@acm:~$ sudo update-java-alternatives -s java-6-sun
\end{lstlisting}
Nuevamente se verifica que versión de java está activa:\\
\begin{lstlisting}
ada@acm:~$ java -version
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02, mixed mode) 
ada@acm:~$ javac -version
javac 1.6.0_26
\end{lstlisting}
Con esta salida se comprueba que efectivamente se está utilizando el java de Sun.\\

\emph{\textbf{Posibles inconvenientes con la memoria para la JVM}}.\\
La insuficiencia de memoria puede causar inconvenientes para arrancar la Java Virtual Machine.\\
Los archivos indicados para especificar valores de memoria para la JVM son el \textbf{\small{\ttfamily{judgehost-config.php}}} en:
\textbf{\small{\ttfamily{/usr/local/domjudge/judgehost/etc}}} y los scripts \textbf{\small{\ttfamily{compile\_java.sh}}}, \textbf{\small{\ttfamily{compile\_java\_javac\_detect.sh}}} en: \\
\textbf{\small{\ttfamily{/usr/local/domjudge/judgehost/lib/judge}}}.\\

En el \textbf{\small{\ttfamily{judgehost-config.php}}} la memoria límite viene con un valor de 524288kB:
\begin{lstlisting}[language=php] 
define('MEMLIMIT', 524288);
\end{lstlisting}
Se recomienda aumentarla según las necesidades, para este caso, se cambia a:
\begin{lstlisting}[language=php] 
define('MEMLIMIT', 100000000);
\end{lstlisting}
\vspace{0.5cm}

Adicionalmente, en \textbf{\small{\ttfamily{compile\_java.sh}}} y en \textbf{\small{\ttfamily{compile\_java\_javac\_detect.sh}}} se modifica:
\begin{lstlisting}
###MEMRESERVED=300000  
MEMRESERVED=512000000
###exec java -Xrs -Xss8m -Xmx${MEMLIMITJAVA}k $MAINCLASS 
exec java -Xrs -Xss128m -Xms256m -Xmx1024m $MAINCLASS
\end{lstlisting}
\vspace{0.5cm}

Finalmente, se recomienda incluir el siguiente código en \textbf{\small{\ttfamily{compile.sh}}}, ubicado en \textbf{\small{\ttfamily{/usr/local/domjudge/judgehost/lib/judge/compile.sh}}}:
\lstset{basicstyle=\scriptsize\ttfamily, keywordstyle=\bfseries, escapechar={', --}, showstringspaces=false}
\begin{lstlisting}
85 ##
86 if [ "$LANG" == "java" ];then
87         COMPILE_SCRIPT="$SCRIPTDIR/compile_java_javac_detect.sh"
88         logmsg $LOG_INFO "se esta usando!!!!!  $COMPILE_SCRIPT"
89 else
90         COMPILE_SCRIPT="$SCRIPTDIR/compile_$LANG.sh"
91 fi
92 
93 SOURCE="$WORKDIR/compile/source.$EXT"
94 
95 logmsg $LOG_INFO "se esta usando!!!!!  $COMPILE_SCRIPT"
96 ##
\end{lstlisting}

\vspace{0.5cm}
El código se adiciona justo en la línea 88 y 95, con ello se obtiene información del compilador que se usa para cada lenguaje, es bastante útil para la solución de problemas relacionados con los compiladores.\\
En \textbf{\small{\ttfamily{/usr/local/domjudge/judgehost/log/judge.debian.log}}} se muestra información adicional del \textbf{judgedaemon}, para visualizarlos se ejecuta el comando:\\
 \textbf{\small{\ttfamily{tail -f /usr/local/domjudge/judgehost/log/judge.debian.log}}}\\\\

\emph{\textbf{Fecha,hora incorrecta para el judgedaemon}}.\\
Si al ejecutar el \textbf{judgedaemon}, se observe que la hora o la fecha que esté muestra, no concuerdan con la fecha, hora del servidor, es necesario indicar la zona horaria en el archivo:\\
\textbf{\small{\ttfamily{/usr/local/domjudge/judgehost/lib/init.php}}}, en este se define una zona horaria por defecto y debe ser modificada según la zona requerida. El fragmento de código, debe lucir cómo:
\begin{lstlisting}
// Initialize default timezone to system default. 
PHP >= 5.3 generates
// E_NOTICE warning messages otherwise.
//@date_default_timezone_set(@date_default_timezone_get());
@date_default_timezone_set('America/Bogota');
\end{lstlisting}		
		\end{enumerate}

	\end{enumerate}


\subsection{INSTALACIÓN DE NUEVOS MÓDULOS}

El código fuente del presente trabajo se encuentra alojado en google code, puede ser obtenido accediendo a la url:\\
\url{http://code.google.com/p/abvega2/source/browse/\#hg\%2Fdomjudge\%253Fstate\%253Dclosed}.\\
Las ramas principales del repositorio son \textbf{domjudge} y \textbf{new\_code}, modificaciones y nuevos scripts se encuentran en esta última.\\

Para instalar los nuevos módulos se aplican los siguientes pasos:

	\begin{enumerate}

	\item\textbf{Obtener el nuevo código fuente del repositorio, descargando toda la rama \textbf{new\_code} }\\

	\item\textbf{Ejecutar scripts para adicionar tablas y campos a la DB domjudge}\\
Contenidos en \textbf{\small{\ttfamily{ new\_code/domserver/sql/changes\_db\_domjudge}}}:\\
	\textbf{\small{\ttfamily{changes\_db\_structure.sql}}}\\
	\textbf{\small{\ttfamily{changes\_db\_privileges.sql}}}\\

Este paso se puede realizar a través de phpmyadmin importando los scripts sql o por medio de la consola MySQL, para lo cual, estando ubicado en el directorio donde se descargo el nuevo código:\\
\textbf{\small{\ttfamily{
ada@acm:/home/ada/new\_code/domserver/sql/changes\_db\_domjudge\$\\
mysql domjudge -u root -p \\
mysql> source changes\_db\_structure.sql\\
mysql> source changes\_db\_privileges.sql\\
}}}
	
	\item\textbf{Crear segunda DB: domjudge2}\\
Para crear la nueva DB se ejecuta el script \textbf{\small{\ttfamily{dj-setup-database-domjudge2}}} contenido en: \textbf{\small{\ttfamily{new\_code/domserver/sql/db\_domjudge2}}}, se debe correr como root.\\
\textbf{\small{\ttfamily{root@acm:/home/ada/new\_code/domserver/sql/db\_domjudge2\# \\
./dj-setup-database-domjudge2 -u root -r install}}}\\
	

	\item\textbf{Copiar código fuente en el domserver}\\

	\begin{enumerate}

		\item Copiar en \textbf{\small{\ttfamily{domserver/lib}}} las nuevas librerias:\\
		\textbf{\small{\ttfamily{lib\_db1.php}}} y \textbf{\small{\ttfamily{lib\_db2.php}}}, alojadas en \textbf{\small{\ttfamily{new\_code/domserver/lib}}}.\\

		\item Copiar en \textbf{\small{\ttfamily{domserver/lib/www}}} nuevos scripts:\\
		\textbf{\small{\ttfamily{new\_common.jury.php}}} y \textbf{\small{\ttfamily{new\_lib.php}}}.\\
		 Contenidos en \textbf{\small{\ttfamily{new\_code/domserver/lib/www}}}.\\

		\item Incluir nuevo código en \textbf{\small{\ttfamily{domserver/www}}}:\\
		\textbf{\small{\ttfamily{jquery-validation-1.9.0}}}\\
		\textbf{\small{\ttfamily{examples\_start\_stop.css}}}\\ 
		\textbf{\small{\ttfamily{jquery.lwtCountdown-1.0.js}}}\\
	 	\textbf{\small{\ttfamily{upgrade.php}}}.\\
		Almacenado en \textbf{\small{\ttfamily{new\_code/domserver/www}}}.\\
	
		\item Adicionar en \textbf{\small{\ttfamily{domserver/www/images}}}:\\
		\textbf{\small{\ttfamily{dashboard\_bg.png}}}\\
		\textbf{\small{\ttfamily{upload\_file.png}}}\\
		\textbf{\small{\ttfamily{pdf.png}}}\\
		\textbf{\small{\ttfamily{view\_list.png}}}\\
		\textbf{\small{\ttfamily{player\_play.png}}}\\
		Estas imágenes se alojan en \textbf{\small{\ttfamily{new\_code/domserver/www/images}}}.\\
	
		\item En \textbf{\small{\ttfamily{domserver/www/jury/}}}:\\
		El directorio \textbf{\small{\ttfamily{new\_code/domserver/www/jury}}} almacena todo el código que se utiliza en este paso.\\
		Reemplazar los siguientes scripts php, que han sido modificados:\\
		\textbf{\small{\ttfamily{contest.php}}} \\	
		\textbf{\small{\ttfamily{contests.php}}}\\	
		\textbf{\small{\ttfamily{delete.php}}}\\	
		\textbf{\small{\ttfamily{edit.php}}}\\	
		\textbf{\small{\ttfamily{index.php}}}\\
		\textbf{\small{\ttfamily{init.php}}}\\	
		\textbf{\small{\ttfamily{menu.php}}}\\	
		\textbf{\small{\ttfamily{problem.php}}}\\	
		\textbf{\small{\ttfamily{problems.php}}}\\	
		\textbf{\small{\ttfamily{team.php}}}\\	
		\textbf{\small{\ttfamily{teams.php}}}\\
		\textbf{\small{\ttfamily{testcase.php}}}\\	
		
		Adicionar nuevos scripts:\\
		\textbf{\small{\ttfamily{current\_post.php}}}\\	
		\textbf{\small{\ttfamily{enable\_team.php}}}\\	
		\textbf{\small{\ttfamily{guardar\_archivo.php}}}\\	
		\textbf{\small{\ttfamily{history\_contest.php}}}\\	
		\textbf{\small{\ttfamily{history\_post.php}}}\\	
		\textbf{\small{\ttfamily{inner\_contest.php}}}\\		
		\textbf{\small{\ttfamily{inner\_contests.php}}}\\	
		\textbf{\small{\ttfamily{list\_source\_code.php}}}\\	
		\textbf{\small{\ttfamily{postmaratones.php}}}\\		
		\textbf{\small{\ttfamily{postmaraton.php}}}\\	
		\textbf{\small{\ttfamily{problems\_past.php}}}\\	
		\textbf{\small{\ttfamily{see\_Problem.php}}}\\	
		\textbf{\small{\ttfamily{source\_code.php}}}\\	

		\item En \textbf{\small{\ttfamily{domserver/www/team/}}}\\
		El directorio \textbf{\small{\ttfamily{new\_code/domserver/www/jury/}}} aloja el código mencionado a continuación:\\
		\textbf{\small{\ttfamily{index.php}}}\\	
		\textbf{\small{\ttfamily{init.php}}}\\	
		\textbf{\small{\ttfamily{menu.php}}}\\	
		\textbf{\small{\ttfamily{websubmit.php}}}\\
	
		Nuevos archivos:\\
		\textbf{\small{\ttfamily{add\_comment.php}}}\\	
		\textbf{\small{\ttfamily{add\_scode.php}}}\\	
		\textbf{\small{\ttfamily{current\_post.php}}}\\	
		\textbf{\small{\ttfamily{history\_contest.php}}}\\	
		\textbf{\small{\ttfamily{history\_post.php}}}\\
		\textbf{\small{\ttfamily{list\_source\_code.php}}}\\	
		\textbf{\small{\ttfamily{problems\_past.php}}}\\	
		\textbf{\small{\ttfamily{see\_Problem.php}}}\\	
		\textbf{\small{\ttfamily{set\_problems.php}}}\\		
		\textbf{\small{\ttfamily{show\_source.php}}}\\	
		\textbf{\small{\ttfamily{source\_code.php}}}\\	
		\textbf{\small{\ttfamily{time.php}}}\\	
		\textbf{\small{\ttfamily{websubmit\_post.php}}}\\

		\end{enumerate}	
	
	\item\textbf{Copiar código fuente en el judgehost}\\

		\begin{enumerate}

		\item En \textbf{\small{\ttfamily{judgehost/lib}}}\\
	Copiar la nueva librería, \textbf{\small{\ttfamily{lib\_db2.php}}}.\\
	Almacenada en \textbf{\small{\ttfamily{new\_code/judgehost/lib/}}}.\\

		\item En \textbf{\small{\ttfamily{judgehost/lib/judge}}}\\
	Reemplazar el daemon  \textbf{\small{\ttfamily{judgedaemon.main.php}}}, este se encuentra alojado en \textbf{\small{\ttfamily{new\_code/judgehost/lib/judge}}}.

		\end{enumerate}	
	
	\end{enumerate}

\vspace{1.0cm}	

\section{PRUEBA PILOTO}\label{prue_piloto}

La prueba piloto consiste en implantar la herramienta de estudio en un servidor del programa de Ingeniería de sistemas y computación de la Universidad Tecnológica de Pereira, de modo que los maratonistas puedan hacer uso de ella.\\
La implantación se logra siguiendo los pasos descritos en \ref{inst_tool}.\\

Como tal, la prueba piloto inicia a partir del 12 de abril de 2012, desde entonces, se encuentra a total disposición de los usuarios, quienes reciben una cuenta y el respectivo manual de usuario, entre las actividades que se han desarrollado en ella están:\\

	\begin{itemize}

	\item \textbf{UTP INTERNAL CONTEST 2012-04-12} \\
Corresponde a la primera maratón de entrenamiento realizada en la herramienta de estudio, tuvo una duración de seis días y con esta se probó un ambiente de competencia amistoso en la que los equipos podían estar integrados hasta por tres maratonistas con la única restricción de que pertenecieran a la UTP.\\
Los resultados de este contest fueron bastante satisfactorios ya que tanto servidor como clientes de la herramienta de estudio, respondieron de forma adecuada.\\
	
	\item \textbf{POSTMARATÓN: II COMPETENCIA CCMP 2012 [2012-04-19]}\\
Es la primera Postmaratón que se llevó a cabo en la herramienta, su problem set estaba integrado por el conjunto de problemas al que los maratonistas se habían enfrentados durante la segunda competencia del CCMP del presente año, con la gran diferencia de que la actual competencia estaría activa por una semana, y además, esta pasaría al histórico. Desde ambos modos podrían continuar sometiendo sus soluciones, acceder a las soluciones y comentarios del resto de maratonistas.\\
Para esta actividad de retroalimentación se otorgo una cuenta de usuario Post a cada maratonista asistente.\\			

	\item \textbf{III MARATÓN INTERNA UTP[2012-04-28]}:\\
Se trata de una competencia de programación al estilo de las mejores maratones, en donde el contest dura cinco horas, y los equipos ganadores reciben trofeos; este tipo de actividades se realiza desde hace ya tres años en el programa, y para el presente año se desarrolló en la herramienta de estudio. En lo que respecta a la herramienta, todo funcionó perfectamente.\\

	\item \textbf{POSTMARATÓN: III MARATÓN INTERNA UTP[2012-05-10]}:\\
Corresponde a la postmaratón de la competencia interna, realizada previamente, en está los maratonistas tenían la oportunidad de resolver los problemas que por x o y motivo no solucionaron bien, o no alcanzarón a resolver durante la competencia.\\
Nuevamente, la herramienta ha funcionado como se esperaba.

	\end{itemize}

La prueba piloto no solamente ha servido como método adicional para probar el funcionamiento de la herramienta de estudio, sino que también, ha permitido que los maratonistas del programa se familiaricen con su uso y funcionamiento.\\

\chapter{DOCUMENTACIÓN DE LA HERRAMIENTA}

\section{GENERALIDADES DEL SISTEMA}

\subsection{Tipos de usuarios}\label{users}

	\begin{itemize}

	\item \textbf{Jury}:\\
El el usuario encargado de atender y vigilar el desarrollo de la competencia, de modo que debe formular/responder clarificaciones, rejuzgar cuando sea necesario y garantizar que los competidores actúan bajo las reglas establecidas para el contest.

	\item \textbf{Admin}:\\
En forma general, es el usuario responsable de instalar, configurar y dar mantenibilidad a la herramienta de estudio.

	\item \textbf{Team}:\\
El usuario team se clasifica en \textbf{interno} o \textbf{externo}, de acuerdo al valor que posea en el atributo \textbf{Affiliation}. Cuando un team posee este atributo con un valor igual a \textbf{UTP}, es considerado como \textbf{team interno}, si posee un valor diferente, es considerado como \textbf{team externo}.\\
A su vez, un team interno puede ser clasificado de acuerdo al valor que presente en el atributo Category, el cual puede variar entre: Participants, Post, Observers u Organisation.\\
En lo que respecta a los teams externos, sólo deben poseer como valor en el atributo Category, el correspondiente a Participants.\\\\
Cada \textbf{team} posee además, un campo \textbf{enable}. Por default posee un valor de uno para teams internos y un valor de cero para teams externos. Mediante este habilitador, se controla la participación de teams externos en los diferentes tipos de Contest que se pueden llevar a cabo con la herramienta.\\
 
	\item \textbf{Public}:\\
Es todo usuario totalmente ajeno a la competencia, generalmente se interesa por conocer el estado de la competencia.

	\end{itemize}

\subsection{Tipos de Contest}\label{contests}

\subsubsection{External Contest}
Se trata de un Contest que puede servir como entrenamiento o competencia nacional, en el pueden participar teams del tipo externo~\ref{users}, y teams del tipo interno~\ref{users} correspondientes a la categoría Participants.

\subsubsection{Internal Contest}
Son Contest exclusivos para los maratonistas de UTP, pueden servir como entrenamiento o como competencia interna, por tanto, los teams a participar deben ser del tipo interno~\ref{users} correspondientes a la categoría Participants.

\subsubsection{Postmaratones}
Una \textbf{postmaratón} es un  \textbf{contest tipo Post} que se activa por un período de tiempo \textbf{t}, durante el cual, los maratonistas estarán sometiendo soluciones a problemas que no lograrón resolver durante un Contest de competencia, paralelo a esto, tendrán acceso tanto al código fuente de las soluciones correctas que sus compañeros  han sometido, como a los comentarios que se hagan al respecto, además, el maratonista puede adicionar comentarios al código fuente que es publicado, sin importar si es o no su autor.\\
Permite la participación de teams tipo interno~\ref{users} correspondientes a la categoría Post, cada team estará conformado por un sólo maratonista.\\
Las postmaratones generan históricos.

	
\subsubsection{Current\_post}

	\begin{itemize}

	\item Permite visualizar la actual postmaratón, por el período de tiempo \textbf{t} que esté activada. Durante este período los maratonistas estarán sometiendo soluciones a problemas que no lograrón resolver durante la competencia, paralelo a esto, tendrán acceso al código fuente de las soluciones correctas que sus compañeros  han sometido.

	\item sólo permite la \textbf{participación} de teams pertenecientes a la categoría \textbf{Participanst}, los teams estarán conformados por un sólo maratonista.

	\item El sistema \textbf{publica} el código fuente que los maratonistas someten como solución a un determinado problema,  \textbf{si y sólo si, el resultado del sometimiento es correcto}.

	\item El maratonista puede adicionar comentarios al código fuente que es publicado, sin importar si es o no su autor.

	\item Si al terminar la postmaratón quedan problemas sin soluciones publicadas, estas podrán ser publicadas a través del módulo \textbf{History\_post} .

	\end{itemize}

\subsubsection{History\_post}

	\begin{itemize}

	\item Está activado siempre.

	\item Permite acceder a todos los códigos fuentes y comentarios.

	\item Permite publicar código fuente cómo solución a determinado problema que no fue publicado durante una postmaratón.

	\item Es visible para los usuarios tipo post(categoría post), esto con la finalidad de que maratonistas que no participaron en la postmaratón puedan contribuir con el código fuente de un determinado problema que no se haya podido obtener en el espacio de postmaratón.

	\end{itemize}


\section{MANUAL PARA USUARIO ADMIN}

El usuario Admin es el encargado de controlar y garantizar el funcionamiento de la herramienta de estudio, entre las diferentes labores que debe realizar se encuentran:

	\begin{itemize}
	\item Crear los diferentes tipos de Contest.
	\item Crear los teams.
	\item Administrar las claves para los diferentes teams.
	\item Habilitar o deshabilitar los teams a participar en los determinados Contest.
	\item Levantar el servicio del judgedaemon.
	\end{itemize}

La interfaz de usuario admin debe lucir similar a la siguiente figura:\\

	\begin{figure}[H]
	\caption{Interfaz web para usuario Admin.}
	\label{fig:admin1}
	\begin{center}
  	\fbox{\includegraphics[width=15.5cm]{imagenes/administrator/admin1.jpg}}
	\end{center}
	\end{figure}

\subsection{Instrucciones para Logearse:}

	\begin{enumerate}
	\item Ingresar a la interfaz web del admin, accediendo al link: \\
	\url{http://10.1.3.220/domjudge/jury}
	\item Ingresar el user \textbf{admin} y el \textbf{password} correspondiente, una vez se esté logueado, aparece la interfaz del admin, debe lucir similar a la figura \ref{fig:admin1}:
	\end{enumerate}
	

\subsection{Instrucciones para crear/borrar teams:}

Toda operación referente a un team se puede realizar a través de la opción \textbf{teams} en el menu superior o en los links ubicados verticalmente a la derecha de la interfaz web como se ilustra en la siguiente figura:

	\begin{figure}[H]
	\caption{Teams.}
	\label{fig:teams_admin}
	\begin{center}
  	\fbox{\includegraphics[width=15cm]{imagenes/administrator/teams/team1.jpg}}
	\end{center}
	\end{figure}		

	\clearpage	

\subsubsection{Crear un team Interno categoría Participants}

	\begin{enumerate}

	\item Ingresando al menú de teams[\ref{fig:teams_admin}], dar click en el icono add, así:
	\begin{figure}[H]
	\caption{Adcionar nuevo team.}
	\label{fig:teams_add}
	\begin{center}
  	\fbox{\includegraphics[width=15cm]{imagenes/administrator/teams/team3_crear2.jpg}}
	\end{center}
	\end{figure}

	\item A continuación aparece el respectivo formulario que debe ser diligenciado, en el campo Category se selecciona \textbf{Participants}, en Affiliation se selecciona \textbf{UTP}, se llena el resto de campos y se guarda. Observar la figura \ref{fig:teams_add_form}:\\

Una vez se valida el formulario, el team interno aparece en la lista de teams existentes, no presenta checkbox para el campo enable/disable porque los teams internos están activados por defecto. Tal como se ilustra en la figura \ref{fig:teams_add_list}.

	\end{enumerate}


\subsubsection{Crear un team Interno categoría Post}

Los pasos para crear un team Interno con categoría Post, son similares a los necesarios para crear un team Interno categoría Participants, lo único que cambia es la selección del valor para los campos Category y Affiliation, que deben corresponder a Post y UTP, respectivamente.

\subsubsection{Crear un team Externo}

De manera similar a como se crean teams internos de categoría Participants y Post, se crea un team Externo, el valor de la categoría sigue siendo Participants, el valor de Affiliation es diferente a UTP.

\subsubsection{Borrar un team}

	\begin{enumerate}

	\item En la lista de teams existentes como lo ilustra la figura \ref{fig:teams_add_list}, dar click en botón \textbf{delete} correspondiente al team a borrar.
	\item Confirmar la operación dando click en el botón \textbf{Yes I'm sure}, que aparece en el mensaje de confirmación.
	\item Con la operación exitosa, aparece una página similar a la figura x, basta con dar click en el link \url{back to teams} para retornar a la lista de teams.

	\end{enumerate}
	
	\vspace{0.5cm}

	\begin{figure}[H]
	\caption{Adicionar Team interno.}
	\label{fig:teams_add_form}
	\begin{center}
  	\fbox{\includegraphics[width=15cm]{imagenes/administrator/teams/team_crear3.jpg}}
	\end{center}
	\end{figure}

	\begin{figure}[H]
	\caption{Lista de teams existentes.}
	\label{fig:teams_add_list}
	\begin{center}
  	\fbox{\includegraphics[width=15cm]{imagenes/administrator/teams/team_crear4.jpg}}
	\end{center}
	\end{figure}


\subsection{Instrucciones para configurar un External Contest:}  

	\begin{enumerate}

	\item Crear el External Contest

	\begin{enumerate}

	\item Estando logueado en la interfaz web de admin, dar click en el link \textbf{External Contests}:

	\begin{figure}[H]
	\centering
	\label{fig:exter1}
	\caption{Selección External Contest.}
	\fbox{\includegraphics[width=15cm]{imagenes/administrator/exter1.jpg}}
	\end{figure}

	\vspace{1.0cm}

	\item Dar click en el icono \textbf{add}, tal como se muestra en la figura \ref{fig:selec_exter}.
	
		\begin{figure}[H]	
		\caption{Adcionar External Contest}
		\label{fig:selec_exter}
		\begin{center}
		\fbox{\includegraphics[width=13cm]{imagenes/administrator/exter2.jpg}}
		\end{center}		
		\end{figure}	

	\item Llenar los campos del formulario, seleccionar la opción \textbf{yes} del campo \textbf{enable}, para que el contest pueda ser visualizado, dar click en el boton guardar, así:
	
		\begin{figure}[H]	
		\caption{Formulario External Contest}
		\label{fig:exter_form}
		\begin{center}
		\fbox{\includegraphics[width=13cm]{imagenes/administrator/exter3.jpg}}
		\end{center}		
		\end{figure}	
		
	El contest que se acabo de crear debe aparecer en el listado de los External Contests.

	\end{enumerate}

	\vspace{0.5cm}	

	\item Crear los problemas asociados al External Contest

	\begin{enumerate}

	\item Para crear un problema existe la opción \textbf{problems} en el menú superior  o en los links ubicados verticalmente a la derecha de la interfaz web. fig\\

	\item Habiendo ingresado al menú \textbf{problems} se da click en el icono \textbf{add new problem}, así:

		\begin{figure}[H]	
		\caption{Crear problema}
		\label{fig:add_prob}
		\begin{center}
		\fbox{\includegraphics[width=13cm]{imagenes/administrator/exter_prob2.jpg}}
		\end{center}		
		\end{figure}

		\vspace{0.5cm}

	\item Se procede a llenar los campos del formulario, ver figura:\\

		\begin{figure}[H]	
		\caption{ Llenar formulario de problema}
		\label{fig:prob_form}
		\begin{center}
		\fbox{\includegraphics[width=13cm]{imagenes/administrator/problems/crear4.jpg}}
		\end{center}		
		\end{figure}

\textbf{Problem ID:} corresponde al identificador del problema y debe estar compuesto por caracteres alfanuméricos.\\
\textbf{Contest or Postm:} asocia el problema que se está creando con el Contest\footnote{Internal o External} o Postmaratón en que será válido el problema.\\
\textbf{Problem name:} nombre a asignar al problema.\\
\textbf{Allow submit:} habilitar la opción \textbf{yes} permite que los teams puedan someter soluciones del problema.\\
\textbf{Allow judge:} habilitar la opción \textbf{yes} permite juzgar los sometimientos correspondientes al problema.\\
\textbf{Timelimit:} define el tiempo límite de ejecución, en segundos, para los algoritmos sometidos como solución al problema.\\
\textbf{Balloon colour:} es el color a asociar con el problema\\
\textbf{Special run script:} es opcional, permite definir un programa especial para compilar los sometimientos del problema.\\
\textbf{Special compare script:} campo opcional, permite definir un programa especial para comparar la salida del programa.\\

	\item con el formulario diligenciado, se da click en guardar.\\

	\end{enumerate}

	\item Subir testcases:\\
Luego de crear los problemas para el External Contest, es necesario subir los respectivos testcases. 
	\begin{enumerate}
	\item En la lista de \textbf{problems}, se da click en el icono \textbf{editar}, correspondiente al problema al que se va asociar el testcase.
	\item En la página de edición del problema, se da click en el link \url{details/edit}, así:

		\begin{figure}[H]	
		\caption{ Tescase}
		\label{fig:testcase}
		\begin{center}
	\fbox{\includegraphics[width=10cm]{imagenes/administrator/problems/testcase_problem_post2.png}}
		\end{center}		
		\end{figure}

	\item Se seleccionan los testcase de entrada y salida, y se da click en la opción \textbf{Submit all changes}.\\
Al guardar los datos del formulario, debe aparecer una página similar a: \\

		\begin{figure}[H]	
		\caption{ Testaces del problema}
		\label{fig:test_up}
		\begin{center}
	\fbox{\includegraphics[width=14cm]{imagenes/administrator/problems/testcase_problem_post3.png}}
		\end{center}		
		\end{figure}				

De igual forma, se sube la cantidad de testcases necesarios para cada problema.\\
En caso de ser necesario borrar el tescase, basta con dar click en el icono \textbf{delete}.\\
	\end{enumerate}

	\item Subir el pdf asociado al problema.

	\begin{enumerate}

	\item En la página \textbf{problems}, dar click en el icono \textbf{upload}, así:

		\begin{figure}[H]	
		\caption{ Pdf del problema}
		\label{fig:test_up}
		\begin{center}
	\fbox{\includegraphics[width=15cm]{imagenes/administrator/problems/pdfsubir1.png}}
		\end{center}		
		\end{figure}

	\item Seleccionar el archivo pdf a subir y enviar el formulario.\\
El listado de problemas, en la columna \textbf{statement} debe contener un icono pdf asociado al problema al que se ha subido el archivo pdf.\\

Si se requiere borrar o cambiar el archivo pdf, basta con dar click en el icono \textbf{upload} y seleccionar la opción adecuada:

	\end{enumerate}

	\vspace{0.5cm}

	\item Habilitar los teams que participarán en el External Contest.\\
Se deben habilitar los teams externos~\ref{users} que tendrán autorización para participar en la competencia. En el caso de los teams internos~\ref{users} no hace falta habilitarlos, ya que están habilitados por defecto.\\
Si aún no se han creado los teams, basta con adicionarlos y habilitarlos.

	\begin{enumerate}

	\item En el listado de teams existente, como se muestra en la figura \ref{fig:teams_add}, dar click en el checkbox ubicado en campo able/disable, correspondiente al o los teams a habilitar.

	\item Finalmente, dar click en el boton Enable Teams.

	\end{enumerate}

	\end{enumerate}

\subsection{Instrucciones para configurar un Internal Contest:} 
Para crear un Internal Contest:
	\begin{itemize}

	\item Se elige el menú Internal Contests, ubicado al lado izquierdo en la interfaz del admin, ver figura \ref{fig:exter1}.

	\item Se aplican los pasos comprendidos entre 1. b) y 4, utilizados para crear un External Contest.	
	
	\end{itemize}

\subsection{Instrucciones para configurar una Postmaratón:} 

	\begin{itemize}

	\item Seleccionar el menú Postmaratones, ubicado al lado izquierdo en la interfaz del admin, ver figura \ref{fig:exter1}.
	
	\item Aplican los pasos comprendidos entre 1. b) y 4, utilizados para crear un External Contest.	
		
	\end{itemize}	

\clearpage

\section{MANUAL PARA USUARIO TEAM}

\subsection{Conceptos Previos}

\subsubsection{Postmaratones}

Una \textbf{postmaratón} es un \textbf{contest de entrenamiento} que se activa por un período de tiempo \textbf{t}, durante el cual, los maratonistas someten soluciones a problemas de un determinado Contest de competencia.

A diferencia de una competencia de programación que generalmente dura 5 horas\footnote{En lo que respecta a las competencias del circuito Colombiano de Maratones de Programación.}, una Postmaratón tiene un tiempo de duración compuesto por varios días, durante esté, el sistema almacena y publica:

	\begin{itemize}

	\item El código fuente sometido como solución a un determinado problema, \textbf{si y sólo si, el resultado del sometimiento es correct}.

	\item Los comentarios que se vayan realizando al código fuente publicado.
	
	\end{itemize}

Una vez finalice la Postmaratón, se puede acceder al código fuente y a los comentarios almacenados durante la misma, también es posible someter soluciones.

De este modo, cuenta con los módulos \textbf{Current\_post} y \textbf{History\_post}.

	\begin{itemize}

	\item\textbf{Current\_post}

		\begin{itemize}

		\item Está activo durante el tiempo que dura la actual Postmaratón.
		
		\item Permite visualizar detalles de la actual postmaratón.

		\item Permite acceder a las soluciones y comentarios disponibles.

		\item Permite adicionar comentarios al código fuente publicado. 		
	
		\end{itemize} 	

	\item\textbf{History\_post:}

		\begin{itemize}

		\item Esta activado siempre.

		\item Permite acceder a los datos de Postmaratones que hayan finalizado.

		\item  Posibilita que el team adicione comentarios a las soluciones existentes de una determinada Postmaratón.		
	
		\item Permite que el team someta soluciones a un determinado problema, siempre y cuando, durante la Postmaratón  no haya obtenido \textbf{correct} en el sometimiento de tal problema. 
	
		\end{itemize} 	

	\end{itemize}	
  
\subsubsection{Tipos de Cuentas}\label{cuenta_team}

Todo team interno[\ref{users}] tendrá dos cuentas, una para participar en Contest bien sea del tipo External[\ref{contests}] o Internal[\ref{contests}]; esta cuenta podrá ser grupal o individual, según las características del contest y se denomina \textbf{cuenta contest}.

{La otra cuenta, es individual y es exclusiva para participar en Postmaratones, recibe el nombre de \textbf{cuenta post}.}

\subsection{Instrucciones para logearse}

	\begin{enumerate}

	\item Ingresar a la interfaz web del team, accediendo al link:\\
	\url{http://10.1.3.220/domjudge/team}
	
	\item Ingresar el \textbf{login} y \textbf{password} correspondiente.\\

	\begin{figure}[H]
	\caption{Logeo team.}
	\label{fig:team_log1}
	\begin{center}
	\fbox{\includegraphics[width=12cm]{imagenes/teams/logear1.jpg}}
	\end{center}
	\end{figure}
Si el team pretende ingresar al entorno de un External[\ref{contests}] o un Internal[\ref{contests}] Contest, debe ingresar el login y password correspondiente a la \textbf{cuenta contest}[\ref{cuenta_team}].\\

Si por el contrario, desea ingresar a un entorno de Postmaratón, debe ingresar el login y password correspondiente a la \textbf{cuenta post}[\ref{cuenta_team}].\\


	\item En cuanto se suministren los datos correctos, se podrá acceder a la página del team dando click en el link: {\color{blue}Continue to your team page}. Ver figura \ref{fig:team_log2}
	
	\begin{figure}[H]
	\caption{Acceder página team.}
	\label{fig:team_log2}
	\begin{center}
	\fbox{\includegraphics[width=9cm]{imagenes/teams/logear3.jpg}}
	\end{center}
	\end{figure}	

Finalmente, debe aparecer una página similar a:\\

	\begin{figure}[H]
	\caption{Página team.}
	\label{fig:team_log3}
	\begin{center}
	\fbox{\includegraphics[width=15cm]{imagenes/teams/logear4_2.jpg}}
	\end{center}
	\end{figure}

	\end{enumerate}

	
\subsection{Instrucciones para participar en una Postmaratón}

Se debe estar logueado en la \textbf{cuenta post}[\ref{cuenta_team}].

\subsubsection{Acceder al Problem Set  de la actual Postmaratón}

Los problemas de la actual Postmaratón son listados al dar click en el link \url{problems}, ubicado en el menú superior de la página.

\subsubsection{Someter soluciones}

		\begin{itemize}

		\item Dar click en el link \url{submit}, ubicado en el menú superior de la página.

		\item Seleccionar el archivo del algoritmo.

		\item Seleccionar el problema a juzgar.

		\item Seleccionar el lenguaje del algoritmo.

		\item Dar click en el botón submit.\\

		La figura \ref{fig:sub_post} muestra los pasos 2 a 5.\\

Si la operación es exitosa, aparece un mensaje similar al de la figura \ref{fig:sub_exit}\\
		
		\end{itemize}	

		\begin{figure}[H]
		\caption{Submit actual Postmaratón.}
		\label{fig:sub_post}
		\begin{center}
		\fbox{\includegraphics[width=6cm]{imagenes/teams/contest/submit_postmaraton2.jpg}}
		\end{center}
		\end{figure}

		\begin{figure}[H]
		\caption{Submit exitoso.}
		\label{fig:sub_exit}
		\begin{center}
		\fbox{\includegraphics[width=7cm]{imagenes/teams/contest/submitpostmaraton4_a.jpg}}
		\end{center}			
		\end{figure}

\subsubsection{Conocer estado de submissions realizadas}

		\begin{enumerate}
		
		\item El team puede ver el estado de sus sometimientos accediendo al link \url{sumissions}, ubicado en el menú superior de la página. Ver figura \ref{fig:est_sub}

		\end{enumerate}

		\begin{figure}[H]
		\caption{Estado submissions.}
		\label{fig:est_sub}
		\begin{center}
	\fbox{\includegraphics[width=15cm]{imagenes/teams/contest/submitpostmaraton_resultado.jpg}}
		\end{center}	
		\end{figure}

		\clearpage

\subsubsection{Conocer detalles actual Postmaratón}

		\begin{enumerate}

		\item\textbf{Conocer soluciones disponibles}\\

Acceder al menú \url{current_post}, a continuación aparece el nombre de la actual Postmaratón y una lista con las columnas: Problem, Stament y Source Code Avaible, correspondientes a: nombre, enunciado y cantidad soluciones correctas del problema.

		\begin{figure}[H]
		\caption{Detalles actual Postmaratón.}
		\label{fig:det_post}
		\begin{center}
		\fbox{\includegraphics[width=14cm]{imagenes/teams/contest/det_post1.jpg}}
		\end{center}
		\end{figure}

		\item\textbf{Acceder al código fuente solución de un determinado problema}

			\begin{enumerate}
				
			\item Dar click en la columna \textbf{Source Code Avaible}, correspondiente al problema de interés. Ver figura \ref{fig:lista_sc}
			\begin{figure}[H]
			\centering
			\caption{Lista Source code}
			\fbox{\includegraphics[width=14cm]{imagenes/teams/contest/det_post2.jpg}}
			\label{fig:lista_sc}			
			\end{figure}
		
			\vspace{1.0 cm}			

			\item A continuación aparece el listado de soluciones disponibles. Se especifica el team autor, la hora del submit y el lenguaje de programación\\

			\begin{figure}[H]
			\centering
			\caption{Seleccionar source code a visualizar}
		\fbox{\includegraphics[width=12cm]{imagenes/teams/contest/acceder_sc.jpg}}
			\label{fig:selec_sc}			
			\end{figure}

		Basta con dar click en un elemento de la lista para visualizar el código, tal como aparece en la figura \ref{fig:opers_sc}.
		
			\end{enumerate}

			\vspace{0.5cm}

		\item\textbf{Descargar el código fuente de un determinado problema.}

			\begin{enumerate}
	
			\item Estando ubicado en el código fuente de problema objetivo, se da click en la opción \url{download}. Ver la figura \ref{fig:opers_sc}.

			\end{enumerate}

			\vspace{0.5cm}

		\item\textbf{Adicionar comentario a un código fuente}

			\begin{enumerate}

			\item Dar click en la opción {\color{blue}add comment}, que aparece al final de cada código fuente, tal como se aprecia en la figura \ref{fig:opers_sc}.

			\item Se edita el comentario y se da click en publicar fig \ref{fig:pub_comm}.

			\begin{figure}[H]
			\centering
			\caption{Visualizar source code}
		\fbox{\includegraphics[width=15cm, height=16.5cm]{imagenes/teams/contest/opers2_sc.jpg}}
			\label{fig:opers_sc}			
			\end{figure}			

			\begin{figure}[H]
			\caption{Publicar comentario}
			\label{fig:pub_comm}
			\begin{center}
		\fbox{\includegraphics[width=15cm]{imagenes/teams/contest/public_comment.jpg}}
			\end{center}
			\end{figure}
	
			\end{enumerate}
			
		\end{enumerate}

		\vspace{1.0cm}

\subsection{Instrucciones para utilizar History Post}
Cada que finaliza una Postmaratón se genera un histórico de la misma, en este se almacenan las soluciones y comentarios del problem set.\\
El team tiene la posibilidad de someter soluciones de los problemas que no logro resolver durante una Postmaratón y realizar los comentarios que considere necesarios.

Se debe estar logueado en la \textbf{cuenta post}[\ref{cuenta_team}].

\subsubsection{Visualizar histórico de Postmaratones}
	
Acceder a \url{History\_post} del menu principal.

	\begin{figure}[H]
	\caption{Acceder History\_post}
	\label{fig:acc_history}
	\begin{center}
	\fbox{\includegraphics[width=15cm]{imagenes/teams/contest/hist_post.jpg}}
	\end{center}		
	\end{figure}

Seguidamente se listan las postmaratones que han finalizado.\\
	
	\begin{figure}[H]	
	\caption{Postmaratones Finalizadas}
	\label{fig:post_fin}
	\begin{center}
	\fbox{\includegraphics[width=15cm]{imagenes/teams/history/list_post.jpg}}
	\end{center}		
	\end{figure}

\subsubsection{Someter soluciones}
	
	\begin{enumerate}

	\item Elegir la Postmaratón de interés.\\
Una vez elegida la postmaratón de interés(ver figura \ref{fig:post_fin}), aparece un listado con el número de soluciones para cada problema, más la opción de someter una solución, sólo si, el actual team no ha sometido una solución correcta para el mismo.

	\begin{figure}[H]
	\caption{Lista problemas y soluciones History\_post}	
	\label{fig:sc_history}
	\begin{center}
	\fbox{\includegraphics[width=15cm]{imagenes/teams/history/add_sc0.jpg}}
	\end{center}		
	\end{figure}

	\item Elegir el problema.\\
Suponiendo que se va a someter una solución para el problema GCD\_P, se da click en la opción Add Source, figura \ref{fig:sc_history}. 

	\item Descargar los testcases de entrada.\\
En cuanto se ejecuta el paso anterior, aparece una página similar a:

	\begin{figure}[H]
	\caption{Testcases de entrada History\_post}
	\label{fig:testcases}
	\begin{center}
	\fbox{\includegraphics[width=15cm]{imagenes/teams/history/add_sc1.jpg}}
	\end{center}	
	\end{figure}

Donde se proporcionan los testcases de entrada del problema, la mecánica consiste en que una vez el team inicie la descarga de estos, tiene cuatro minutos para someter su solución.

Con los testcases de entrada, el team debe generar las salidas con el código fuente que pretende someter.

En casos como el expuesto, donde el problema posee demasiados casos de prueba, cuatro minutos puede ser poco tiempo para generar las respectivas salidas, y subirlas.
Ante esto, el team puede optar por descargar los testcases y dedicarse a generar las salidas. En cuanto las posea todas, actualiza la página y sube los respectivos archivos.\\\\

	\item Subir salidas generadas y algoritmo a someter.

		\begin{enumerate}
		
		\item Indicar la ubicación de los archivos correspondientes a las salidas generadas.

		\item Indicar ubicación del archivo correspondiente al algoritmo.

		\item Seleccionar el lenguaje.
	
		\item Dar click en el botón submit.\\


		Tal cómo se aprecia en la figura \ref{fig:submit_hist}

		\vspace{1.0cm}

		\begin{figure}[H]
		\caption{Submit salidas del programa y algoritmo}
		\label{fig:submit_hist}
		\begin{center}
		\fbox{\includegraphics[width=15.5cm]{imagenes/teams/history/sub_sc_hy.jpg}}	
		\end{center}		
		\end{figure}

		\end{enumerate}

	\item{Respuesta del sometimiento}\\

Las posibles respuestas son:

	\begin{itemize}

	\item\textbf{CORRECT}\\
Un sometimiento da como resultado \textbf{CORRECT}, cuando los archivos de salida proporcionados corresponden con las salidas que debe generar el programa. Ver figura \ref{fig:correct}\\
El código fuente se publica.

	\item\textbf{ERROR}\\
Si los archivos de salida proporcionados no corresponden con los valores que debe generar el programa, se obtiene \textbf{ERROR}.Ver figura \ref{fig:error}\\
El código fuente no es publicado.

	\item\textbf{TOO-LATE}\\
Cuando la operación de subir los archivos sobrepasa los cuatro minutos, correspondientes al tiempo límite, obtiene como resultado \textbf{TOO-LATE}. Ver figura \ref{fig:time}.
	
	\end{itemize}

	\end{enumerate}

	\vspace{1.0cm}

	\begin{figure}[H]	
	\caption{Error Submission}
	\label{fig:error}
	\begin{center}
	\fbox{\includegraphics[width=15cm]{imagenes/teams/history/res1.jpg}}
	\end{center}		
	\end{figure}

	\begin{figure}[H]	
	\caption{Correct Submission}
	\label{fig:correct}
	\begin{center}
	\fbox{\includegraphics[width=15cm]{imagenes/teams/history/res2.jpg}}
	\end{center}		
	\end{figure}

	\begin{figure}[H]	
	\caption{Too-late Submission}
	\label{fig:time}
	\begin{center}
	\fbox{\includegraphics[width=15cm]{imagenes/teams/history/res3.jpg}}
	\end{center}		
	\end{figure}
	
\subsubsection{Adicionar Comentarios}

	\begin{enumerate}

	\item Acceder al source code del problema de interés.

	\begin{figure}[H]	
	\caption{Visualizar source code}
	\label{fig:selec_sc}
	\begin{center}
	\fbox{\includegraphics[width=15cm]{imagenes/teams/history/selec_sc.jpg}}
	\end{center}		
	\end{figure}
	
	\item Estando en la página que muestra el código fuente, dar click la opción {\color{blue} add comment}. Ver figura \ref{fig:opers_sc}

	\item Editar el comentario y dar click en el boton public, de manera similar a como se hizo en \ref{fig:pub_comm}

	\end{enumerate}


\chapter{RESULTADOS Y CONCLUSIONES}

En maratones de programación el criterio para definir que equipo gana, es bastante sencillo, básicamente gana aquel equipo que más problemas logre resolver durante la competencia, sin embargo, cuando se pretende hacer escuela, el significado de ganar va más allá y entran a jugar criterios que incluyen tanto el antes como el después de la maratón.\\
Precisamente y tratando de hacer trasferencia de conocimiento entre los maratonistas del programa de Ingeniería de Sistemas y Computación de la Universidad Tecnológica de Pereira, se desarrolla el presente trabajo de investigación, a través del cual se expone un diseño de solución que da como resultado la herramienta Postmaratón actualmente utilizada por los maratonistas.\\

Para comprobar que la herramienta contribuye en la retroalimentación, se procede a analizar los datos obtenidos a través de encuestas aplicadas.\\
 

\section{MEDICIÓN DEL IMPACTO DEL PROYECTO}

\subsection{APLICACIÓN DE ENCUESTAS FASE 2}\label{analisis_vars}

Inicialmente en el capítulo 2 en la sección \ref{encu_fase1}, se aplicó y analizó la encuesta 1, definida  en \ref{encuesta1}, mediante la cual, fueron analizadas las variables \textbf{Experiencia Maratonista}, \textbf{Actividad Postmaratón} y \textbf{Estado de retroalimentación}, en una etapa en la que aún no se contaba con la herramienta de estudio.\\

En la actual etapa cuando ya se cuenta con la herramienta implantada, se aplica la misma encuesta a 26 maratonistas del programa.

\subsection{ANÁLISIS DE LOS DATOS OBTENIDOS EN FASE 1 Y FASE 2}
Los resultados de la encuesta 1 para la presente fase, son analizados con respecto a los resultados previamente obtenidos en la fase 1.\\

Variable \textbf{Experiencia Maratonista}.
	
	\begin{itemize}
	
	\item \textbf{Indicador}: Nivel de experiencia en maratones de programación.\\

\textbf{Item 1}: ¿En cuántas competencias del Circuito Colombiano de Maratones de Programación (de ahora en adelante: CCMP) ha participado?\\

	\begin{figure}[H]	
	\caption{Experiencia Maratonista Fase1 Fase2}
	\label{fig:exp_marara1_f2}
	\begin{center}
	\fbox{\includegraphics[width=10cm]{imagenes/encuesta/f1f2_1.png}}
	\end{center}		
	\end{figure}

Como se observa en la anterior figura, el porcentaje de maratonistas novatos en la presente etapa es cero, lo que indica un aumento del \textbf{34,62\%} en nivel \textbf{Bajo} de \textbf{experiencia} en la actual etapa, el cual presentaba un valor de \textbf{15,38\%} en etapa 1.\\

Recordando la clasificación de los niveles de experiencia en maratones del CCMP, se tiene:\\
Nivel \textbf{Bajo} se integra por la categoría: \textbf{Entre 1 y 4}; nivel \textbf{Medio} por: \textbf{Entre 5 y 8} y por \textbf{Entre 9 y 12}; nivel \textbf{Alto} por las categorías \textbf{Entre 13 y 16} y \textbf{Más de 16}.\\

En cuanto a nivel \textbf{Medio} de experiencia, con un valor de \textbf{15,38\%} en etapa 1, ha aumentado en \textbf{15,39\%}.\\

Finalmente, el nivel \textbf{Alto} de experiencia tiene un aumento cercano al \textbf{4\%} y presenta una importante transición entre los intervalos que le conforman, así el  \textbf{15,38\%} de maratonistas que habían participado entre 13 y 16 competencias pasan ahora a formar parte del intervalo que indica que han participado en más de 16 maratones de programación del CCMP.\\

	\vspace{0.5cm}

	\item \textbf{Indicador}: Nivel de experiencia con jueces online.\\

\textbf{Item 2}: ¿Ha utilizado alguna vez un juez en línea (\emph{online judge})?\\

Tal como lo ilustra la figura \ref{fig:expe_marara2_f2}, el \textbf{23,08\%} de maratonistas que no contaban con experiencia en la utilización de jueces online, en etapa 1, pasan a formar parte del grupo que si la posee, de esta manera, el total de la población nuevamente encuestada  cuenta con  experiencia en la utilización de jueces online.\\


	\begin{figure}[H]	
	\caption{Experiencia Maratonista Fase1 Fase2}
	\label{fig:expe_marara2_f2}
	\begin{center}
	\fbox{\includegraphics[width=8cm]{imagenes/encuesta/f1f2_2.png}}
	\end{center}		
	\end{figure}

	\vspace{0.5cm}

	\item Nivel de conocimiento de material de apoyo para resolver maratones de programación.\\

\textbf{Ítem 3}: ¿Ha descargado material de apoyo para las maratones de programación, tales cómo casos de prueba, enunciado y/o soluciones de problemas?\\

La siguiente figura \ref{fig:expe_mara3_f2}, refleja que en la fase actual , se presenta una disminución cercana al \textbf{4\%} en lo que respecta a la no utilización de material de apoyo para resolver maratones de programación. Pues en etapa 1 existía un \textbf{19,23\%} de maratonistas que no cumplían con tal característica.\\

	\begin{figure}[H]	
	\caption{Experiencia Maratonista Fase1 Fase2}
	\label{fig:expe_mara3_f2}
	\begin{center}
	\fbox{\includegraphics[width=8cm]{imagenes/encuesta/f1f2_3.png}}
	\end{center}		
	\end{figure}

	\end{itemize}

	\vspace{0.5cm}

Variable \textbf{ACTIVIDAD POSTMARATÓN}.
	
	\begin{itemize}
	
	\item \textbf{Indicador}: Nivel de actividad postmaratón.\\

\textbf{Ítem 4}: ¿Después de una competencia de programación qué hace con los ejercicios que no logró resolver correctamente?\\

	\begin{figure}[H]	
	\caption{Actividad Postmaratón}
	\label{fig:act_post1_f2}
	\begin{center}
	\fbox{\includegraphics[width=10cm]{imagenes/encuesta/f1f2_4.png}}
	\end{center}		
	\end{figure}

Cuando se trata de ejercicios no alcanzados a resolver durante la competencia, la gráfica muestra un aumento del \textbf{19,23\%} entre quienes resuelven y someten la solución en un juez online; un aumento del \textbf{3,84\%} entre quienes buscan la solución en internet, y una notoria disminución de inactividad del \textbf{23,08\%}\\\\

\textbf{Ítem 5}:¿Después de una competencia de programación qué hace con los ejercicios que no alcanzó a trabajar?\\

	\begin{figure}[H]	
	\caption{Actividad Postmaratón}
	\label{fig:act_post2_f2}
	\begin{center}
	\fbox{\includegraphics[width=10cm]{imagenes/encuesta/f1f2_5.png}}
	\end{center}		
	\end{figure}

	\vspace{0.5cm}

El análisis muestra que aumenta la intención de trabajo postmaratón en un \textbf{3.84\%}, cuando se trata de problemas que el maratonista no alcanzó a solucionar en competencia, y un aumento del \textbf{7,69\%} entre quienes optan por buscar la solución en internet, el resto de proporciones se mantienen bastante parecidas a las obtenidas en fase 1.

	\end{itemize}

	\vspace{0.5cm}

Variable \textbf{ESTADO DE RETROALIMENTACIÓN}.
	
	\begin{itemize}
	
	\item\textbf{Indicador}: Nivel de retroalimentación.\\

\textbf{Ítem 6}: ¿Considera que actualmente en la Universidad Tecnológica de Pereira existe retroalimentación después de las competencias del CCMP?\\

	\begin{figure}[H]	
	\caption{Estado de Retroalimentación}
	\label{fig:esta_retro1_f2}
	\begin{center}
	\fbox{\includegraphics[width=7cm]{imagenes/encuesta/f1f2_6.png}}
	\end{center}		
	\end{figure}
	
El nivel de percepción de retroalimentación paso de un \textbf{69,23\%} a un \textbf{88,46\%}, así, la percepción de no existencia de la misma, se redujo en un \textbf{19,23\%}.\\


	\item\textbf{Indicador}: Cálidad de la retroalimentación.\\

\textbf{Ítem 7}: ¿Qué tan adecuada considera que es la retroalimentación después de las competencias del CCMP?\\

	\begin{figure}[H]	
	\caption{Estado de Retroalimentación Fase1 Fase2}
	\label{fig:esta_retro2_f2}
	\begin{center}
	\fbox{\includegraphics[width=11cm]{imagenes/encuesta/f1f2_7.png}}
	\end{center}		
	\end{figure}

En cuanto a calidad de retroalimentación, el análisis de la gráfica \ref{fig:esta_retro2_f2} muestra datos positivos.\\
En la fase 1 la calificación con mayor porcentaje era \textbf{Aceptable} con \textbf{38,46\%}, en la presente, la calificación con mayor porcentaje es \textbf{Bueno} con una proporción del \textbf{76,92\%}, por su parte, la calificación \textbf{Excelente} se mantiene en igual proporción.\\\\
		
\textbf{Ítem 8}:¿Qué tanto participa en el proceso de retroalimentación después de las competencias del CCMP?

	\begin{figure}[H]	
	\caption{Estado de Retroalimentación}
	\label{fig:esta_retro3_f2}
	\begin{center}
	\fbox{\includegraphics[width=8cm]{imagenes/encuesta/f1f2_8.png}}
	\end{center}		
	\end{figure}	

	\end{itemize}	

Finalmente, el análisis muestra una importante reducción  al \textbf{0\%} en la no participación en el proceso de retroalimentación, así, aunque el porcentaje de poca participación se ha mantenido, también se ha elevado una mayor participación con el nivel mucho, en un porcentaje del  \textbf{34,61\%}.

\subsection{VALIDACIÓN DEL PROYECTO}\label{validacion}

Para validar el proyecto se ha definido \textbf{Encuesta 2} como se muestra en \ref{encuesta2}, que se aplica a los usuarios de la herramienta de estudio, el total de entrevistados es 26.\\ 

\textbf{Ítem 1}: ¿Qué tanto considera usted que le aporta la actual herramienta postmaratón al proceso de retroalimentación después de las competencias del CCMP?\\

	\begin{figure}[H]	
	\caption{Aporte herramienta}
	\label{fig:val1}
	\begin{center}
	\fbox{\includegraphics[width=8cm]{imagenes/encuesta/val1.png}}
	\end{center}		
	\end{figure}

El análisis de los datos muestra que el 88,46\% de los usuarios, consideran que la herramienta de estudio contribuye de manera significativa al proceso de retroalimentación.\\

\textbf{Ítem 2}: ¿Cómo calificaría usted el espacio de retroalimentación que le brinda la herramienta de estudio postmaratón?\\

	\begin{figure}[H]	
	\caption{Calificación espacio de retroalimentación}
	\label{fig:val2}
	\begin{center}
	\fbox{\includegraphics[width=8cm]{imagenes/encuesta/val2.png}}
	\end{center}		
	\end{figure}

Según la anterior figura \ref{fig:val2}, los porcentajes más altos corresponden a las mejores calificaciones para el espacio brindado por la herramienta de estudio, puesto que el \textbf{57,69\%}, más de la mitad de usuarios, lo califica cómo Bueno y el \textbf{26,92\%} como Excelente.\\
En lo que respecta a la calificación aceptable, el \textbf{11,54\%} de los usuarios la califica como tal.\\
También existe una pequeña proporción de usuarios representada por el \textbf{3,85\%}, que la califica como Mala.\\
 
\textbf{Ítem 3}: ¿Qué tanto participa usted con la actual herramienta postmaratón?\\

	\begin{figure}[H]	
	\caption{Participación en la herramienta}
	\label{fig:val3}
	\begin{center}
	\fbox{\includegraphics[width=8cm]{imagenes/encuesta/val3.png}}
	\end{center}		
	\end{figure}

El análisis de los datos muestra que el \textbf{96,15\%} de los usuarios participa con la actual herramienta Postmaratón, frente a un \textbf{3,85\%} que no participa.\\

De los usuarios que participan, el \textbf{26,92\%} presentan una mayor participación.\\
 
\textbf{Ítem 4}: ¿Considera usted que la actual herramienta postmaratón le brinda el espacio necesario para socializar la solución de los problemas de maratón con sus compañeros?\\

	\begin{figure}[H]	
	\caption{Espacio de socialización en la herramienta}
	\label{fig:val4}
	\begin{center}
	\fbox{\includegraphics[width=8cm]{imagenes/encuesta/val4.png}}
	\end{center}		
	\end{figure}

De los usuarios de la herramienta, el \textbf{92,31\%} lo califica como un espacio apropiado para socializar la solución de los problemas.\\

\textbf{Ítem 5}: ¿Qué le mejoraría a la actual herramienta postmaratón?\\

Esta última pregunta ha sido formulada de forma abierta, con el fin de tener en cuenta posibles mejoraras a la herramienta Postmaratón, de modo que contribuyan al beneficio del proceso de retroalimentación.\\

Entre las sugerencias de los usuarios, sólo dos atañen directamente la herramienta: \\
Un mecanismo que indique cuáles son los nuevos comentarios adicionados al código fuente.\\
Incluir el dato tiempo de ejecución del algoritmo que se publica.\\

Ambas sugerencias has sido tenidas en cuenta, actualmente, se está trabajando en estas.\\

El resto de ellas, van dirigidas a aspectos cómo el horario en que se realizan los entrenamientos presenciales\footnote{Lo cual no depende de la herramienta sino del horario en que pueda asistir tanto el docente líder como los maratonistas, para lo cual se tiene destinado el día jueves de 2:00 a 6:00 PM}, los temas de algoritmia a estudiar, lo cual no es decidido por la herramienta sino por quien la administre.

\chapter{CONCLUSIONES}

	\begin{itemize}

	\item La hipótesis de este trabajo de investigación plantea la posibilidad de contribuir a la retroalimentación entre los maratonistas del programa\footnote{se hace referencia al programa de Ingeniería de Sistemas y Computación de la Universidad Tecnológica de Pereira}, mediante una herramienta computacional que permita realizar Postmaratones, precisamente, la respuesta a dicha hipótesis se infiere a partir del análisis de las encuestas aplicadas, el cual muestra resultados bastante positivos tanto para las variables definidas[\ref{analisis_vars}] como para los aspectos de validación del proyecto [\ref{validacion}], estos permiten concluir que efectivamente la herramienta de estudio diseñada e implantada, contribuye a la retroalimentación de los maratonistas de UTP.\\

	\item El entregable del presente trabajo investigativo es además, de gran valor para el proceso de crear escuela entre los maratonistas de UTP, con lo cual se busca hacer relevo generacional del conocimiento adquirido por los competidores de alta experiencia en maratones de programación.\\

	\item El proceso de aprendizaje colaborativo que se apoya a partir de la herramienta de estudio, genera modelos a seguir, una clara muestra de ello es que una vez iniciada la prueba piloto en el programa de Ingeniería de Sistemas y Computación de la Universidad Tecnológica de Pereira, el CCMP adopta nuestra metodología, de tal modo, que al finalizar una competencia del circuito se inicia una postmaratón de la misma, sin embargo, nuestra método se enfoca más hacia el aprendizaje colaborativo, así los maratonistas de UTP pueden ver y compartir entre todos, el código fuente de los problemas que la herramienta de estudio ha juzgado como correctos, cosa que no sucede en el CCMP, donde solamente se puede acceder al código fuente de autoría propia\footnote{Como se mencionó en el marco legal del presente trabajo, para respetar la autoría del código fuente publicado por la herramienta de estudio, el maratonista deber ser advertido de tal situación antes de crear su cuenta de usuario, si acepta tal condición recibe su respectiva cuenta.}.\\

	\item El presente trabajo de investigación es pionero en la temática de maratones en la UTP, pues si bien, estás vienen siendo promovidas desde hace algún tiempo en el programa, es poca la investigación que se ha realizado en torno a ella.\\

	\item En lo que respecta a la utilización de una herramienta de estudio para apoyar la transferencia de conocimiento en maratones, el programa de Ingeniería de Sistemas y Computación de la Universidad Tecnológica de Pereira es precursora no solamente al interior de la universidad, sino también en el país.

	\end{itemize}


\chapter{POSIBLES PROYECTOS QUE SE PUEDEN DERIVAR DE ESTA INVESTIGACIÓN}

Como precursor en el contexto investigativo de maratones de la UTP, el presente trabajo abre una importante temática de investigación en la que todavía queda mucho por hacer. Entre los proyectos que se pueden derivar, están:

	\begin{itemize}
	
	\item \textbf{Sistema de juzgamiento bajo una estructura de clusters de computadores}:\\
Otro proyecto bastante interesante, consistiría en diseñar una arquitectura de hardware(recordar arquitectura \ref{arq_hard}) basada en clusters y adaptar el domserver para que realice funciones de despachador. Básicamente, el servidor de bases de datos, el servidor web y el domserver serían alojados en diferentes máquinas, adicionalmente, se ejecutarían n judgedaemos en servidores dedicados, estos se comunicarían con el despachador y estarían juzgando los sometimientos de manera simultánea.\\
Con una arquitectura de este tipo, se estaría proporcionando un sistema de juzgamiento para que los maratonistas investiguen y realicen practicas en con algoritmos que requieran un alto desempeño computacional.\\

	\item \textbf{Adaptación del sistema de juzgamiento en una herramienta para la enseñanza de la programación}:\\
Consistiría en una herramienta que permita adoptar la metodología de maratones para enseñar en cursos de programación, de modo que los parciales del curso sean maratones conformadas por problemas que impliquen utilizar temas previamente explicados, adicionalmente, permitiría realizar clases practicas en donde se planteen ejercicios, que al ser juzgados muestren al estudiante información de errores detallada.\\

Este tipo de herramientas sería bastante útil porque además de promover las maratones como una competencia profesional del ingeniero de sistemas, contribuirían a que la población de maratonistas de UTP aumentará no sólo en cantidad sino también en calidad.\\

	\item \textbf{Un sistema de Juzgamiento al estilo de uva\footnote{Consultar el online juez en: http://uva.onlinejudge.org/}}:\\
Consistiría en un juez online bastante robusto que permita desarrollar n tipos de contest de manera simultanea, generar bancos de problemas que puedan ser juzgados en cualquier momento, etc.\\
Sería un sistema que otorgaría cuenta a cualquier usuario del mundo.\\
Este proyecto, además de promover maratones de programación otorgaría un gran reconocimiento al programa de Ingeniería de Sistemas Y Computación de la universidad Tecnológica de Pereira, puesto que a nivel colombiano no existe una universidad que haya desarrollado una aplicación de semejante alcance.

	\end{itemize}

\chapter{APÉNDICE 1}

Se otorga la licencia GNU Free Document al presente trabajo de investigación.\\

Se respetan y mantienen las licencias GNU General Public License versión 2 (GPLv2), BSD licence y MIT/X11 licence, con que la comunidad de desarrollo de DOMjudge lo libera.\\
En lo que respecta a las modificaciones y adicciones realizadas al mismo, se mantiene la licencia correspondiente a a los módulos implicados, en este caso, GPLv2.

\chapter*{BIBLIOGRAFÍA}

%%\tiny{http://dl.acm.org/citation.cfm?id=1349332.1349341\&coll=DL\&dl=GUIDE\&CFID=42331413\&CFTOKEN=61301375}\newline

AMIRPOUR AMARAII Saman. Observations on Teamwork Strategies in the ACM International Collegiate Programming
Contest [base de datos en línea]. Volume 14 Issue 4, New York, USA. Magazine Crossroads, June 2008. Disponible en: ACM DIGITAL LIBRARY: http://dl.acm.org/citation.cfm?id=1349332.1349341\\	

MANZOOR Shahriar. Common mistakes in online and real-time contests [base de datos en línea]. Volume 14 Issue 4, New York, USA, Magazine Crossroads, June 2008, Late Summer Edition. Disponible en: ACM DIGITAL LIBRARY:\\
http://dl.acm.org/citation.cfm?id=1375972.1375976\\ 

ERNST Fabian, MOELANDS Jeroen, PIETERSE Seppo. Programming contest strategies [base de datos en línea]. Volume 3 Issue 2, New York, USA, Magazine Crossroads, Special issue on computer games, December 1996. Disponible en: ACM DIGITAL LIBRARY:\\
http://dl.acm.org/citation.cfm?id=332132.332139\\	

KHERA Vivek, ASTRACHAN Owen, KOTZ David. The internet programming contest: a report and philosophy [base de datos en línea]. Volume 25 Issue 1, New York,USA. SIGCSE '93 Proceedings of the twenty-fourth SIGCSE technical symposium on Computer science education, March 1993. Disponible en: ACM DIGITAL LIBRARY:\\
http://dl.acm.org/citation.cfm?doid=169070.169105\\

ANDRIANOFF Steven K, LEVINE David B, GEWARD Stephen D, HEISSENBERGER Greta A. A testing-based framework for programming contests [base de datos en línea]. New York,USA. ACM eclipse '03 Proceedings of the 2003 OOPSLA workshop on eclipse technology eXchange. Disponible en: ACM DIGITAL LIBRARY:\\
http://dl.acm.org/citation.cfm?id=965660.965680\\

LEAL José Paulo, SILVA Fernando. Mooshak: a Web-based multi-site programming contest system [en línea], Paper. [Portugal]: December 2001. Disponible en internet:\\
http://www.dcc.fc.up.pt/~zp/papers/mooshak-spe.pdf\\ 

AVELLANEDA Fabio. Guía para la configuración de una competencia del Circuito Colombiano de Maratones de Programación [en línea], Guía. [Bogotá]. Disponible en internet:\\ 
http://acm.javeriana.edu.co/maratones/wp-content/uploads/descargas\\

REDIS y Afines: Lineamientos de Maratones de Programación Colombianas.\newline
Sitio web Oficial: http://rediscol.org/cmsv3/?p=210\\

ACIS: Descripción Maratones de Programación Colombianas.\newline
Sitio web Oficial: http://www.acis.org.co/index.php?id=556\\

Association for Computing Machinery. The ACM-ICPC International Collegiate Programming Contest.\newline
Sitio web Oficial: http://cm.baylor.edu/\\

ACM-ICPC Live Archive. History ACM ICPC Regional Contest. \\Sitio web Oficial: http://livearchive.onlinejudge.org/\\

ACM Server: History ACM ICPC Regional Contest. Sitio web Oficial: http://acm-server.ru/\\

UVA Online Judge. Sitio web Oficial: http://uva.onlinejudge.org/\\

SOJ Online Judge. Sitio web Oficial: http://www.spoj.pl/\\

Benelux Algorithm Programming: GEPWNAGE Online Judge.\newline
Sitio web Oficial: http://www.bapc.eu/\\

North Western European Regional Contest: Computer Environment.\\
Sitio web Oficial: http://www.nwerc.eu/\\

Southwestern Europe Regional Contest: Computer Environment.\newline
Sitio web Oficial: http://www.swerc.eu/\\

Programming Contest Control System: Documentación.\newline
Sitio web Oficial: http://www.ecs.csus.edu/pc2/


\end{document}
